syntax = "proto2";

/**
 * Proto definitions for Fonts Knowledge metadata in the filesystem.
 */
package fonts;

option java_package = "com.google.fonts.proto";
option java_outer_classname = "Knowledge";

/** Knowledge metadata. */
message KnowledgeProto {
  /** Module ids in order. */
  repeated string modules = 1;
  // Next = 2
}

/**
 * Knowledge module metadata.
 *
 * <p>Module id is inferred from directory name in the filesystem.
 */
message ModuleProto {
  repeated string alt_ids = 1;
  optional string name = 2;
  /** Brief description of the module. */
  optional string excerpt = 3;
  /** Ids of constituent lessons in order. */
  repeated string lessons = 4;
  // Next = 5
}

/**
 * Knowledge topic metadata.
 *
 * <p>Topic id is inferred from directory name in the filesystem.
 */
message TopicProto {
  repeated string alt_ids = 1;
  optional string name = 2;
  // Next = 3
}

/**
 * Knowledge lesson metadata.
 *
 * <p>Lesson id, as well as id of the parent module, are inferred from path in
 * the filesystem.
 */
message LessonProto {
  repeated string alt_ids = 1;
  optional string name = 2;
  repeated string authors = 3;
  repeated string reviewers = 4;
  /** Ids of tagged topics. */
  repeated string topics = 5;
  /** Ids of lessons to read before this one. */
  repeated string prev_lessons = 6;
  /** Ids of lessons to read after this one. */
  repeated string next_lessons = 7;
  /** Ids of related glossary terms. */
  repeated string related_terms = 8;
  /** Brief description of the lesson. */
  optional string excerpt = 9;
  /** URLs of related content, for example for use in an iframe. */
  repeated string related_content_urls = 10;
  // Next = 11
}

/**
 * Knowledge glossary term metadata.
 *
 * <p>Term id is inferred from directory name in the filesystem.
 */
message TermProto {
  repeated string alt_ids = 1;
  optional string name = 2;
  /** Brief description of the glossary term. */
  optional string excerpt = 3;
  /** Ids of related lessons. */
  repeated string related_lessons = 4;
  /** URLs of related content, for example for use in an iframe. */
  repeated string related_content_urls = 5;
  // Next = 6
}

/**
 * Knowledge contributor metadata.
 *
 * <p>Contributors appear in other Knowledge metadata as authors/reviewers of
 * lessons.
 */
message ContributorsProto {
  repeated ContributorProto contributors = 1;
  // Next = 2

  message ContributorProto {
    optional string name = 1;
    /** URL to the person's personal site. */
    optional string personal_site = 2;
    // Next = 3
  }
}