// This file was auto-generated by the veyron vdl tool.
// Source: schema.vdl

package schema

import (
	"veyron.io/store/veyron2/storage"
)

// Dir is used to represent directories.
type Dir struct {
}

// Movie represents a movie.
type Movie struct {
	Image    string // URL
	Title    string
	Summary  string
	Language string
	// TODO(jyh): Replace these times with IDL types when they are implemented.
	ReleaseDate int64 // ns since the Unix epoch.
	Runtime     int64 // ns
	Genre       string
	Director    storage.ID
}

// Part represents the role of an actor.
type Part struct {
	Actor     storage.ID // Person
	Character string
}

// Review is a movie review.
type Review struct {
	Rating byte // 1-10.
	Text   string
}

// Person represents a person, in any role, including producers, director,
// actor, etc.
type Person struct {
	Image     string // URL
	Name      string
	BirthDate int64 // ns since the Unix epoch.
}
