The code and data behind xeiaso.net
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

pb: document fields correctly

Signed-off-by: Xe Iaso <me@xeiaso.net>

Xe Iaso 93f6421e b5418401

+437 -183
+143 -36
pb/external/protofeed.proto
··· 4 4 5 5 import "google/protobuf/timestamp.proto"; 6 6 7 + // Feed is the root of a Proto Feed document. A feed must at least contain a 8 + // title and items. 7 9 message Feed { 8 - string version = 1; // (required, string) is the URL of the version of the format the feed uses. This should appear at the very top, though we recognize that not all JSON generators allow for ordering. 9 - string title = 2; // (required, string) is the name of the feed, which will often correspond to the name of the website (blog, for instance), though not necessarily. 10 - string home_page_url = 3; // (optional but strongly recommended, string) is the URL of the resource that the feed describes. This resource may or may not actually be a “home” page, but it should be an HTML page. If a feed is published on the public web, this should be considered as required. But it may not make sense in the case of a file created on a desktop computer, when that file is not shared or is shared only privately. 11 - string feed_url = 4; // (optional but strongly recommended, string) is the URL of the feed, and serves as the unique identifier for the feed. As with home_page_url, this should be considered required for feeds on the public web. 12 - string description = 5; // (optional, string) provides more detail, beyond the title, on what the feed is about. A feed reader may display this text. 13 - string user_comment = 6; // (optional, string) is a description of the purpose of the feed. This is for the use of people looking at the raw JSON, and should be ignored by feed readers. 14 - string next_url = 7; // (optional, string) is the URL of a feed that provides the next n items, where n is determined by the publisher. This allows for pagination, but with the expectation that reader software is not required to use it and probably won’t use it very often. next_url must not be the same as feed_url, and it must not be the same as a previous next_url. 15 - string icon = 8; // (optional, string) is the URL of an image for the feed suitable to be used in a source list. It should be square and relatively large — such as 512 x 512 — so that it can be scaled down and so that it can look good on retina displays. It should use transparency where appropriate, since it may be rendered on a non-white background. 16 - string favicon = 9; // (optional, string) is the URL of an image for the feed suitable to be used in a source list. It should be square and relatively small, but not smaller than 64 x 64. 17 - repeated Author authors = 10; // (optional, array of objects) specifies the feed authors. 18 - string language = 11; // (optional, string) is the primary language for the feed. 19 - bool expired = 12; // (optional, boolean) says whether or not the feed is finished — that is, whether or not it will ever update again. A feed for a temporary event, such as an instance of the Olympics, could expire. If the value is true, then it’s expired. Any other value, or the absence of expired, means the feed may continue to update. 20 - repeated Item items = 13; // (required, array of objects) contains the items in the feed. This is the most important element of the feed after the version field. Each item is a story, blog post, article, photograph, video, or other thing. For example, if a feed contains a long article, a podcast episode, and a photo, those three items would be included in items. 10 + // (required, string) is the name of the feed, which will often correspond to 11 + // the name of the website (blog, for instance), though not necessarily. 12 + string title = 2; 13 + // (optional but strongly recommended, string) is the URL of the resource that 14 + // the feed describes. This resource may or may not actually be a “home” page, 15 + // but it should be an HTML page. If a feed is published on the public web, 16 + // this should be considered as required. But it may not make sense in the 17 + // case of a file created on a desktop computer, when that file is not shared 18 + // or is shared only privately. 19 + string home_page_url = 3; 20 + // (optional but strongly recommended, string) is the URL of the feed, and 21 + // serves as the unique identifier for the feed. As with home_page_url, this 22 + // should be considered required for feeds on the public web. 23 + string feed_url = 4; 24 + // (optional, string) provides more detail, beyond the title, on what the feed 25 + // is about. A feed reader may display this text. 26 + string description = 5; 27 + // (optional, string) is a description of the purpose of the feed. This is for 28 + // the use of people looking at the raw Protobuf, and should be ignored by 29 + // feed readers. 30 + string user_comment = 6; 31 + // (optional, string) is the URL of an image for the feed suitable to be used 32 + // in a source list. It should be square and relatively large — such as 512 x 33 + // 512 — so that it can be scaled down and so that it can look good on retina 34 + // displays. It should use transparency where appropriate, since it may be 35 + // rendered on a non-white background. 36 + string icon = 7; 37 + // (optional, string) is the URL of an image for the feed suitable to be used 38 + // in a source list. It should be square and relatively small, but not smaller 39 + // than 64 x 64. 40 + string favicon = 8; 41 + // (optional, array of objects) specifies the feed authors. 42 + repeated Author authors = 9; 43 + // (optional, string) is the primary language for the feed. 44 + string language = 10; 45 + // (optional, boolean) says whether or not the feed is finished — that is, 46 + // whether or not it will ever update again. A feed for a temporary event, 47 + // such as an instance of the Olympics, could expire. If the value is true, 48 + // then it’s expired. Any other value, or the absence of expired, means the 49 + // feed may continue to update. 50 + bool expired = 11; 51 + // (required, array of objects) contains the items in the feed. This is the 52 + // most important element of the feed after the version field. Each item is a 53 + // story, blog post, article, photograph, video, or other thing. For example, 54 + // if a feed contains a long article, a podcast episode, and a photo, those 55 + // three items would be included in items. 56 + repeated Item items = 12; 21 57 } 22 58 59 + // Author is an object representing the author of the feed or item. 23 60 message Author { 24 - string name = 1; // (optional, string) is the author’s name. 25 - string url = 2; // (optional, string) is the URL of a site owned by the author. It could be a blog, micro-blog, Twitter account, and so on. Ideally the linked-to page provides a way to contact the author, but that’s not required. The URL could be a mailto: link, though we suspect that will be rare. 26 - string avatar = 3; // (optional, string) is the URL for an image for the author. As with icon, it should be square and relatively large — such as 512 x 512 pixels — and should use transparency where appropriate, since it may be rendered on a non-white background. 61 + // (optional, string) is the author’s name. 62 + string name = 1; 63 + // (optional, string) is the URL of a site owned by the author. It could be a 64 + // blog, micro-blog, Twitter account, and so on. Ideally the linked-to page 65 + // provides a way to contact the author, but that’s not required. The URL 66 + // could be a mailto: link, though we suspect that will be rare. 67 + string url = 2; 68 + // (optional, string) is the URL for an image for the author. As with icon, it 69 + // should be square and relatively large — such as 512 x 512 pixels — and 70 + // should use transparency where appropriate, since it may be rendered on a 71 + // non-white background. 72 + string avatar = 3; 27 73 } 28 74 75 + // Item is an object representing a single story, blog post, article, 76 + // photograph, video, or other thing within a feed. 29 77 message Item { 30 - string id = 1; // (required, string) is unique for that item for that feed over time. If an item is ever updated, the id should be unchanged. New items should never use a previously-used id. If an id is presented as a number or other type, a JSON Feed reader must coerce it to a string. Ideally, the id is the full URL of the resource described by the item, since URLs make great unique identifiers. 31 - string url = 2; // (optional, string) is the URL of the resource described by the item. It’s the permalink. This may be the same as the id — but should be present regardless. 32 - string external_url = 3; // (optional, string) is the URL of a page elsewhere. This is especially useful for linkblogs. If url links to where you’re talking about a thing, then external_url links to the thing you’re talking about. 33 - string title = 4; // (optional, string) is plain text. Microblog items in particular may omit titles. 34 - string content_text = 5; // (optional, string) is the body of the item. It can be plain text, HTML, or a snippet of Markdown. (It should not be the entire Markdown document; just a snippet.) This is complete enough that it can be displayed alone in a reader. 35 - string content_html = 6; // (optional, string) is the body of the item. It can be plain text, HTML, or a snippet of Markdown. (It should not be the entire Markdown document; just a snippet.) This is complete enough that it can be displayed alone in a reader. 36 - string summary = 7; // (optional, string) is a plain text sentence or two describing the item. This might be presented in a timeline, for instance, where a detail view would display all of content_html or content_text. 37 - string image = 8; // (optional, string) is the URL of the main image for the item. This image may also appear in the content_html — if so, it’s a hint to the feed reader that this is the main, featured image. Even if it’s not, it will appear in the detail view. Images should be square, with a 4:3 aspect ratio. (We will be flexible on this in the future.) 38 - string banner_image = 9; // (optional, string) is the URL of an image to use as a banner. Some blogging systems (such as Medium) display a different banner image in the list view from the detail view. In those systems, this image should be used in the list view, and image in the detail view. 39 - google.protobuf.Timestamp date_published = 10; // (optional, string) specifies the date in RFC 3339 format. (Example: 2010-02-07T14:04:00-05:00.) 40 - google.protobuf.Timestamp date_modified = 11; // (optional, string) specifies the modification date in RFC 3339 format. 41 - repeated Author authors = 12; // (optional, array of objects) has the same structure as the top-level authors. If not specified in an item, then the top-level authors, if present, are the authors of the item. 42 - repeated string tags = 13; // (optional, array of strings) can have any plain text values you want. Tags tend to be just one word, but they may be anything. Note: they are not the equivalent of Twitter hashtags. Some blogging systems and other feed formats call these categories. 43 - string language = 14; // (optional, string) is the language for this item, using the same format as the top-level language field. The value can be different than the primary language for the feed when a specific item is written in a different language than other items in the feed. 44 - repeated Attachement attachments = 15; // (optional, array of objects) specifies the attachments associated with the item. Attachments are files that are associated with an item. The value of the attachments field is an array of objects, each of which has a url field, and other fields as specified in the attachment object definition. 78 + // (required, string) is unique for that item for that feed over time. If an 79 + // item is ever updated, the id should be unchanged. New items should never 80 + // use a previously-used id. If an id is presented as a number or other type, 81 + // a JSON Feed reader must coerce it to a string. Ideally, the id is the full 82 + // URL of the resource described by the item, since URLs make great unique 83 + // identifiers. 84 + string id = 1; 85 + // (optional, string) is the URL of the resource described by the item. It’s 86 + // the permalink. This may be the same as the id — but should be present 87 + // regardless. 88 + string url = 2; 89 + // (optional, string) is the URL of a page elsewhere. This is especially 90 + // useful for linkblogs. If url links to where you’re talking about a thing, 91 + // then external_url links to the thing you’re talking about. 92 + string external_url = 3; 93 + // (optional, string) is plain text. Microblog items in particular may omit 94 + // titles. 95 + string title = 4; 96 + // (optional, string) is the body of the item. It can be plain text, HTML, or 97 + // a snippet of Markdown. (It should not be the entire Markdown document; just 98 + // a snippet.) This is complete enough that it can be displayed alone in a 99 + // reader. 100 + string content_text = 5; 101 + // (optional, string) is the body of the item. It can be plain text, HTML, or 102 + // a snippet of Markdown. (It should not be the entire Markdown document; just 103 + // a snippet.) This is complete enough that it can be displayed alone in a 104 + // reader. 105 + string content_html = 6; 106 + // (optional, string) is a plain text sentence or two describing the item. 107 + // This might be presented in a timeline, for instance, where a detail view 108 + // would display all of content_html or content_text. 109 + string summary = 7; 110 + // (optional, string) is the URL of the main image for the item. This image 111 + // may also appear in the content_html — if so, it’s a hint to the feed reader 112 + // that this is the main, featured image. Even if it’s not, it will appear in 113 + // the detail view. Images should be square, with a 4:3 aspect ratio. (We will 114 + // be flexible on this in the future.) 115 + string image = 8; 116 + // (optional, string) is the URL of an image to use as a banner. Some blogging 117 + // systems (such as Medium) display a different banner image in the list view 118 + // from the detail view. In those systems, this image should be used in the 119 + // list view, and image in the detail view. 120 + string banner_image = 9; 121 + // (optional, string) specifies the date in RFC 3339 format. 122 + google.protobuf.Timestamp date_published = 10; 123 + // (optional, string) specifies the modification date in RFC 3339 format. 124 + google.protobuf.Timestamp date_modified = 11; 125 + // (optional, array of objects) has the same structure as the top-level 126 + // authors. If not specified in an item, then the top-level authors, if 127 + // present, are the authors of the item. 128 + repeated Author authors = 12; 129 + // (optional, array of strings) can have any plain text values you want. Tags 130 + // tend to be just one word, but they may be anything. Note: they are not the 131 + // equivalent of Twitter hashtags. Some blogging systems and other feed 132 + // formats call these categories. 133 + repeated string tags = 13; 134 + // (optional, string) is the language for this item, using the same format as 135 + // the top-level language field. The value can be different than the primary 136 + // language for the feed when a specific item is written in a different 137 + // language than other items in the feed. 138 + string language = 14; 139 + // (optional, array of objects) specifies the attachments associated with the 140 + // item. Attachments are files that are associated with an item. The value of 141 + // the attachments field is an array of objects, each of which has a url 142 + // field, and other fields as specified in the attachment object definition. 143 + repeated Attachement attachments = 15; 45 144 } 46 145 146 + // Attachement is an object representing a file associated with an item. 47 147 message Attachement { 48 - string url = 1; // (required, string) specifies the location of the attachment. 49 - string mime_type = 2; // (required, string) specifies the type of the attachment, such as “audio/mpeg.” 50 - string title = 3; // (optional, string) specifies the title of the attachment. 51 - int32 size_in_bytes = 4; // (optional, number) specifies how large the file is. 52 - int32 duration_in_seconds = 5; // (optional, number) specifies how long it takes to listen to or watch, when played at normal speed. 148 + // (required, string) specifies the location of the attachment. 149 + string url = 1; 150 + // (required, string) specifies the type of the attachment, such as 151 + // “audio/mpeg.” 152 + string mime_type = 2; 153 + // (optional, string) specifies the title of the attachment. 154 + string title = 3; 155 + // (optional, number) specifies how large the file is. 156 + int32 size_in_bytes = 4; 157 + // (optional, number) specifies how long it takes to listen to or watch, when 158 + // played at normal speed. 159 + int32 duration_in_seconds = 5; 53 160 }
+220 -130
pb/external/protofeed/protofeed.pb.go
··· 21 21 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) 22 22 ) 23 23 24 + // Feed is the root of a Proto Feed document. A feed must at least contain a 25 + // title and items. 24 26 type Feed struct { 25 27 state protoimpl.MessageState 26 28 sizeCache protoimpl.SizeCache 27 29 unknownFields protoimpl.UnknownFields 28 30 29 - Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` // (required, string) is the URL of the version of the format the feed uses. This should appear at the very top, though we recognize that not all JSON generators allow for ordering. 30 - Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` // (required, string) is the name of the feed, which will often correspond to the name of the website (blog, for instance), though not necessarily. 31 - HomePageUrl string `protobuf:"bytes,3,opt,name=home_page_url,json=homePageUrl,proto3" json:"home_page_url,omitempty"` // (optional but strongly recommended, string) is the URL of the resource that the feed describes. This resource may or may not actually be a “home” page, but it should be an HTML page. If a feed is published on the public web, this should be considered as required. But it may not make sense in the case of a file created on a desktop computer, when that file is not shared or is shared only privately. 32 - FeedUrl string `protobuf:"bytes,4,opt,name=feed_url,json=feedUrl,proto3" json:"feed_url,omitempty"` // (optional but strongly recommended, string) is the URL of the feed, and serves as the unique identifier for the feed. As with home_page_url, this should be considered required for feeds on the public web. 33 - Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` // (optional, string) provides more detail, beyond the title, on what the feed is about. A feed reader may display this text. 34 - UserComment string `protobuf:"bytes,6,opt,name=user_comment,json=userComment,proto3" json:"user_comment,omitempty"` // (optional, string) is a description of the purpose of the feed. This is for the use of people looking at the raw JSON, and should be ignored by feed readers. 35 - NextUrl string `protobuf:"bytes,7,opt,name=next_url,json=nextUrl,proto3" json:"next_url,omitempty"` // (optional, string) is the URL of a feed that provides the next n items, where n is determined by the publisher. This allows for pagination, but with the expectation that reader software is not required to use it and probably won’t use it very often. next_url must not be the same as feed_url, and it must not be the same as a previous next_url. 36 - Icon string `protobuf:"bytes,8,opt,name=icon,proto3" json:"icon,omitempty"` // (optional, string) is the URL of an image for the feed suitable to be used in a source list. It should be square and relatively large — such as 512 x 512 — so that it can be scaled down and so that it can look good on retina displays. It should use transparency where appropriate, since it may be rendered on a non-white background. 37 - Favicon string `protobuf:"bytes,9,opt,name=favicon,proto3" json:"favicon,omitempty"` // (optional, string) is the URL of an image for the feed suitable to be used in a source list. It should be square and relatively small, but not smaller than 64 x 64. 38 - Authors []*Author `protobuf:"bytes,10,rep,name=authors,proto3" json:"authors,omitempty"` // (optional, array of objects) specifies the feed authors. 39 - Language string `protobuf:"bytes,11,opt,name=language,proto3" json:"language,omitempty"` // (optional, string) is the primary language for the feed. 40 - Expired bool `protobuf:"varint,12,opt,name=expired,proto3" json:"expired,omitempty"` // (optional, boolean) says whether or not the feed is finished — that is, whether or not it will ever update again. A feed for a temporary event, such as an instance of the Olympics, could expire. If the value is true, then it’s expired. Any other value, or the absence of expired, means the feed may continue to update. 41 - Items []*Item `protobuf:"bytes,13,rep,name=items,proto3" json:"items,omitempty"` // (required, array of objects) contains the items in the feed. This is the most important element of the feed after the version field. Each item is a story, blog post, article, photograph, video, or other thing. For example, if a feed contains a long article, a podcast episode, and a photo, those three items would be included in items. 31 + // (required, string) is the name of the feed, which will often correspond to 32 + // the name of the website (blog, for instance), though not necessarily. 33 + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` 34 + // (optional but strongly recommended, string) is the URL of the resource that 35 + // the feed describes. This resource may or may not actually be a “home” page, 36 + // but it should be an HTML page. If a feed is published on the public web, 37 + // this should be considered as required. But it may not make sense in the 38 + // case of a file created on a desktop computer, when that file is not shared 39 + // or is shared only privately. 40 + HomePageUrl string `protobuf:"bytes,3,opt,name=home_page_url,json=homePageUrl,proto3" json:"home_page_url,omitempty"` 41 + // (optional but strongly recommended, string) is the URL of the feed, and 42 + // serves as the unique identifier for the feed. As with home_page_url, this 43 + // should be considered required for feeds on the public web. 44 + FeedUrl string `protobuf:"bytes,4,opt,name=feed_url,json=feedUrl,proto3" json:"feed_url,omitempty"` 45 + // (optional, string) provides more detail, beyond the title, on what the feed 46 + // is about. A feed reader may display this text. 47 + Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` 48 + // (optional, string) is a description of the purpose of the feed. This is for 49 + // the use of people looking at the raw Protobuf, and should be ignored by 50 + // feed readers. 51 + UserComment string `protobuf:"bytes,6,opt,name=user_comment,json=userComment,proto3" json:"user_comment,omitempty"` 52 + // (optional, string) is the URL of an image for the feed suitable to be used 53 + // in a source list. It should be square and relatively large — such as 512 x 54 + // 512 — so that it can be scaled down and so that it can look good on retina 55 + // displays. It should use transparency where appropriate, since it may be 56 + // rendered on a non-white background. 57 + Icon string `protobuf:"bytes,7,opt,name=icon,proto3" json:"icon,omitempty"` 58 + // (optional, string) is the URL of an image for the feed suitable to be used 59 + // in a source list. It should be square and relatively small, but not smaller 60 + // than 64 x 64. 61 + Favicon string `protobuf:"bytes,8,opt,name=favicon,proto3" json:"favicon,omitempty"` 62 + // (optional, array of objects) specifies the feed authors. 63 + Authors []*Author `protobuf:"bytes,9,rep,name=authors,proto3" json:"authors,omitempty"` 64 + // (optional, string) is the primary language for the feed. 65 + Language string `protobuf:"bytes,10,opt,name=language,proto3" json:"language,omitempty"` 66 + // (optional, boolean) says whether or not the feed is finished — that is, 67 + // whether or not it will ever update again. A feed for a temporary event, 68 + // such as an instance of the Olympics, could expire. If the value is true, 69 + // then it’s expired. Any other value, or the absence of expired, means the 70 + // feed may continue to update. 71 + Expired bool `protobuf:"varint,11,opt,name=expired,proto3" json:"expired,omitempty"` 72 + // (required, array of objects) contains the items in the feed. This is the 73 + // most important element of the feed after the version field. Each item is a 74 + // story, blog post, article, photograph, video, or other thing. For example, 75 + // if a feed contains a long article, a podcast episode, and a photo, those 76 + // three items would be included in items. 77 + Items []*Item `protobuf:"bytes,12,rep,name=items,proto3" json:"items,omitempty"` 42 78 } 43 79 44 80 func (x *Feed) Reset() { ··· 73 109 return file_protofeed_proto_rawDescGZIP(), []int{0} 74 110 } 75 111 76 - func (x *Feed) GetVersion() string { 77 - if x != nil { 78 - return x.Version 79 - } 80 - return "" 81 - } 82 - 83 112 func (x *Feed) GetTitle() string { 84 113 if x != nil { 85 114 return x.Title ··· 111 140 func (x *Feed) GetUserComment() string { 112 141 if x != nil { 113 142 return x.UserComment 114 - } 115 - return "" 116 - } 117 - 118 - func (x *Feed) GetNextUrl() string { 119 - if x != nil { 120 - return x.NextUrl 121 143 } 122 144 return "" 123 145 } ··· 164 186 return nil 165 187 } 166 188 189 + // Author is an object representing the author of the feed or item. 167 190 type Author struct { 168 191 state protoimpl.MessageState 169 192 sizeCache protoimpl.SizeCache 170 193 unknownFields protoimpl.UnknownFields 171 194 172 - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // (optional, string) is the author’s name. 173 - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` // (optional, string) is the URL of a site owned by the author. It could be a blog, micro-blog, Twitter account, and so on. Ideally the linked-to page provides a way to contact the author, but that’s not required. The URL could be a mailto: link, though we suspect that will be rare. 174 - Avatar string `protobuf:"bytes,3,opt,name=avatar,proto3" json:"avatar,omitempty"` // (optional, string) is the URL for an image for the author. As with icon, it should be square and relatively large — such as 512 x 512 pixels — and should use transparency where appropriate, since it may be rendered on a non-white background. 195 + // (optional, string) is the author’s name. 196 + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 197 + // (optional, string) is the URL of a site owned by the author. It could be a 198 + // blog, micro-blog, Twitter account, and so on. Ideally the linked-to page 199 + // provides a way to contact the author, but that’s not required. The URL 200 + // could be a mailto: link, though we suspect that will be rare. 201 + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` 202 + // (optional, string) is the URL for an image for the author. As with icon, it 203 + // should be square and relatively large — such as 512 x 512 pixels — and 204 + // should use transparency where appropriate, since it may be rendered on a 205 + // non-white background. 206 + Avatar string `protobuf:"bytes,3,opt,name=avatar,proto3" json:"avatar,omitempty"` 175 207 } 176 208 177 209 func (x *Author) Reset() { ··· 227 259 return "" 228 260 } 229 261 262 + // Item is an object representing a single story, blog post, article, 263 + // photograph, video, or other thing within a feed. 230 264 type Item struct { 231 265 state protoimpl.MessageState 232 266 sizeCache protoimpl.SizeCache 233 267 unknownFields protoimpl.UnknownFields 234 268 235 - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // (required, string) is unique for that item for that feed over time. If an item is ever updated, the id should be unchanged. New items should never use a previously-used id. If an id is presented as a number or other type, a JSON Feed reader must coerce it to a string. Ideally, the id is the full URL of the resource described by the item, since URLs make great unique identifiers. 236 - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` // (optional, string) is the URL of the resource described by the item. It’s the permalink. This may be the same as the id — but should be present regardless. 237 - ExternalUrl string `protobuf:"bytes,3,opt,name=external_url,json=externalUrl,proto3" json:"external_url,omitempty"` // (optional, string) is the URL of a page elsewhere. This is especially useful for linkblogs. If url links to where you’re talking about a thing, then external_url links to the thing you’re talking about. 238 - Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"` // (optional, string) is plain text. Microblog items in particular may omit titles. 239 - ContentText string `protobuf:"bytes,5,opt,name=content_text,json=contentText,proto3" json:"content_text,omitempty"` // (optional, string) is the body of the item. It can be plain text, HTML, or a snippet of Markdown. (It should not be the entire Markdown document; just a snippet.) This is complete enough that it can be displayed alone in a reader. 240 - ContentHtml string `protobuf:"bytes,6,opt,name=content_html,json=contentHtml,proto3" json:"content_html,omitempty"` // (optional, string) is the body of the item. It can be plain text, HTML, or a snippet of Markdown. (It should not be the entire Markdown document; just a snippet.) This is complete enough that it can be displayed alone in a reader. 241 - Summary string `protobuf:"bytes,7,opt,name=summary,proto3" json:"summary,omitempty"` // (optional, string) is a plain text sentence or two describing the item. This might be presented in a timeline, for instance, where a detail view would display all of content_html or content_text. 242 - Image string `protobuf:"bytes,8,opt,name=image,proto3" json:"image,omitempty"` // (optional, string) is the URL of the main image for the item. This image may also appear in the content_html — if so, it’s a hint to the feed reader that this is the main, featured image. Even if it’s not, it will appear in the detail view. Images should be square, with a 4:3 aspect ratio. (We will be flexible on this in the future.) 243 - BannerImage string `protobuf:"bytes,9,opt,name=banner_image,json=bannerImage,proto3" json:"banner_image,omitempty"` // (optional, string) is the URL of an image to use as a banner. Some blogging systems (such as Medium) display a different banner image in the list view from the detail view. In those systems, this image should be used in the list view, and image in the detail view. 244 - DatePublished *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=date_published,json=datePublished,proto3" json:"date_published,omitempty"` // (optional, string) specifies the date in RFC 3339 format. (Example: 2010-02-07T14:04:00-05:00.) 245 - DateModified *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=date_modified,json=dateModified,proto3" json:"date_modified,omitempty"` // (optional, string) specifies the modification date in RFC 3339 format. 246 - Authors []*Author `protobuf:"bytes,12,rep,name=authors,proto3" json:"authors,omitempty"` // (optional, array of objects) has the same structure as the top-level authors. If not specified in an item, then the top-level authors, if present, are the authors of the item. 247 - Tags []string `protobuf:"bytes,13,rep,name=tags,proto3" json:"tags,omitempty"` // (optional, array of strings) can have any plain text values you want. Tags tend to be just one word, but they may be anything. Note: they are not the equivalent of Twitter hashtags. Some blogging systems and other feed formats call these categories. 248 - Language string `protobuf:"bytes,14,opt,name=language,proto3" json:"language,omitempty"` // (optional, string) is the language for this item, using the same format as the top-level language field. The value can be different than the primary language for the feed when a specific item is written in a different language than other items in the feed. 249 - Attachments []*Attachement `protobuf:"bytes,15,rep,name=attachments,proto3" json:"attachments,omitempty"` // (optional, array of objects) specifies the attachments associated with the item. Attachments are files that are associated with an item. The value of the attachments field is an array of objects, each of which has a url field, and other fields as specified in the attachment object definition. 269 + // (required, string) is unique for that item for that feed over time. If an 270 + // item is ever updated, the id should be unchanged. New items should never 271 + // use a previously-used id. If an id is presented as a number or other type, 272 + // a JSON Feed reader must coerce it to a string. Ideally, the id is the full 273 + // URL of the resource described by the item, since URLs make great unique 274 + // identifiers. 275 + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` 276 + // (optional, string) is the URL of the resource described by the item. It’s 277 + // the permalink. This may be the same as the id — but should be present 278 + // regardless. 279 + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` 280 + // (optional, string) is the URL of a page elsewhere. This is especially 281 + // useful for linkblogs. If url links to where you’re talking about a thing, 282 + // then external_url links to the thing you’re talking about. 283 + ExternalUrl string `protobuf:"bytes,3,opt,name=external_url,json=externalUrl,proto3" json:"external_url,omitempty"` 284 + // (optional, string) is plain text. Microblog items in particular may omit 285 + // titles. 286 + Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"` 287 + // (optional, string) is the body of the item. It can be plain text, HTML, or 288 + // a snippet of Markdown. (It should not be the entire Markdown document; just 289 + // a snippet.) This is complete enough that it can be displayed alone in a 290 + // reader. 291 + ContentText string `protobuf:"bytes,5,opt,name=content_text,json=contentText,proto3" json:"content_text,omitempty"` 292 + // (optional, string) is the body of the item. It can be plain text, HTML, or 293 + // a snippet of Markdown. (It should not be the entire Markdown document; just 294 + // a snippet.) This is complete enough that it can be displayed alone in a 295 + // reader. 296 + ContentHtml string `protobuf:"bytes,6,opt,name=content_html,json=contentHtml,proto3" json:"content_html,omitempty"` 297 + // (optional, string) is a plain text sentence or two describing the item. 298 + // This might be presented in a timeline, for instance, where a detail view 299 + // would display all of content_html or content_text. 300 + Summary string `protobuf:"bytes,7,opt,name=summary,proto3" json:"summary,omitempty"` 301 + // (optional, string) is the URL of the main image for the item. This image 302 + // may also appear in the content_html — if so, it’s a hint to the feed reader 303 + // that this is the main, featured image. Even if it’s not, it will appear in 304 + // the detail view. Images should be square, with a 4:3 aspect ratio. (We will 305 + // be flexible on this in the future.) 306 + Image string `protobuf:"bytes,8,opt,name=image,proto3" json:"image,omitempty"` 307 + // (optional, string) is the URL of an image to use as a banner. Some blogging 308 + // systems (such as Medium) display a different banner image in the list view 309 + // from the detail view. In those systems, this image should be used in the 310 + // list view, and image in the detail view. 311 + BannerImage string `protobuf:"bytes,9,opt,name=banner_image,json=bannerImage,proto3" json:"banner_image,omitempty"` 312 + // (optional, string) specifies the date in RFC 3339 format. 313 + DatePublished *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=date_published,json=datePublished,proto3" json:"date_published,omitempty"` 314 + // (optional, string) specifies the modification date in RFC 3339 format. 315 + DateModified *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=date_modified,json=dateModified,proto3" json:"date_modified,omitempty"` 316 + // (optional, array of objects) has the same structure as the top-level 317 + // authors. If not specified in an item, then the top-level authors, if 318 + // present, are the authors of the item. 319 + Authors []*Author `protobuf:"bytes,12,rep,name=authors,proto3" json:"authors,omitempty"` 320 + // (optional, array of strings) can have any plain text values you want. Tags 321 + // tend to be just one word, but they may be anything. Note: they are not the 322 + // equivalent of Twitter hashtags. Some blogging systems and other feed 323 + // formats call these categories. 324 + Tags []string `protobuf:"bytes,13,rep,name=tags,proto3" json:"tags,omitempty"` 325 + // (optional, string) is the language for this item, using the same format as 326 + // the top-level language field. The value can be different than the primary 327 + // language for the feed when a specific item is written in a different 328 + // language than other items in the feed. 329 + Language string `protobuf:"bytes,14,opt,name=language,proto3" json:"language,omitempty"` 330 + // (optional, array of objects) specifies the attachments associated with the 331 + // item. Attachments are files that are associated with an item. The value of 332 + // the attachments field is an array of objects, each of which has a url 333 + // field, and other fields as specified in the attachment object definition. 334 + Attachments []*Attachement `protobuf:"bytes,15,rep,name=attachments,proto3" json:"attachments,omitempty"` 250 335 } 251 336 252 337 func (x *Item) Reset() { ··· 386 471 return nil 387 472 } 388 473 474 + // Attachement is an object representing a file associated with an item. 389 475 type Attachement struct { 390 476 state protoimpl.MessageState 391 477 sizeCache protoimpl.SizeCache 392 478 unknownFields protoimpl.UnknownFields 393 479 394 - Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` // (required, string) specifies the location of the attachment. 395 - MimeType string `protobuf:"bytes,2,opt,name=mime_type,json=mimeType,proto3" json:"mime_type,omitempty"` // (required, string) specifies the type of the attachment, such as “audio/mpeg.” 396 - Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` // (optional, string) specifies the title of the attachment. 397 - SizeInBytes int32 `protobuf:"varint,4,opt,name=size_in_bytes,json=sizeInBytes,proto3" json:"size_in_bytes,omitempty"` // (optional, number) specifies how large the file is. 398 - DurationInSeconds int32 `protobuf:"varint,5,opt,name=duration_in_seconds,json=durationInSeconds,proto3" json:"duration_in_seconds,omitempty"` // (optional, number) specifies how long it takes to listen to or watch, when played at normal speed. 480 + // (required, string) specifies the location of the attachment. 481 + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` 482 + // (required, string) specifies the type of the attachment, such as 483 + // “audio/mpeg.” 484 + MimeType string `protobuf:"bytes,2,opt,name=mime_type,json=mimeType,proto3" json:"mime_type,omitempty"` 485 + // (optional, string) specifies the title of the attachment. 486 + Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` 487 + // (optional, number) specifies how large the file is. 488 + SizeInBytes int32 `protobuf:"varint,4,opt,name=size_in_bytes,json=sizeInBytes,proto3" json:"size_in_bytes,omitempty"` 489 + // (optional, number) specifies how long it takes to listen to or watch, when 490 + // played at normal speed. 491 + DurationInSeconds int32 `protobuf:"varint,5,opt,name=duration_in_seconds,json=durationInSeconds,proto3" json:"duration_in_seconds,omitempty"` 399 492 } 400 493 401 494 func (x *Attachement) Reset() { ··· 472 565 0x6f, 0x12, 0x14, 0x78, 0x65, 0x69, 0x61, 0x73, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x72, 473 566 0x6f, 0x74, 0x6f, 0x66, 0x65, 0x65, 0x64, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 474 567 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 475 - 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa3, 0x03, 0x0a, 0x04, 0x46, 0x65, 0x65, 476 - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 477 - 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 478 - 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 479 - 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x68, 0x6f, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x75, 480 - 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x68, 0x6f, 0x6d, 0x65, 0x50, 0x61, 481 - 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x65, 0x65, 0x64, 0x5f, 0x75, 0x72, 482 - 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x65, 0x65, 0x64, 0x55, 0x72, 0x6c, 483 - 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 484 - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 485 - 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 486 - 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 487 - 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x72, 488 - 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x78, 0x74, 0x55, 0x72, 0x6c, 489 - 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 490 - 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x18, 491 - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x36, 492 - 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 493 - 0x1c, 0x2e, 0x78, 0x65, 0x69, 0x61, 0x73, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 494 - 0x74, 0x6f, 0x66, 0x65, 0x65, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x52, 0x07, 0x61, 495 - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 496 - 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 497 - 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x18, 0x0c, 0x20, 498 - 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x05, 499 - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x65, 500 - 0x69, 0x61, 0x73, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x65, 501 - 0x65, 0x64, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x46, 502 - 0x0a, 0x06, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 503 - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 504 - 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x16, 505 - 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 506 - 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x22, 0xab, 0x04, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 507 - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 508 - 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 509 - 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x72, 510 - 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 511 - 0x6c, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 512 - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 513 - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 514 - 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x21, 0x0a, 515 - 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x74, 0x6d, 0x6c, 0x18, 0x06, 0x20, 516 - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x74, 0x6d, 0x6c, 517 - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 518 - 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 519 - 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 520 - 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 521 - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x6d, 522 - 0x61, 0x67, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x75, 0x62, 0x6c, 523 - 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 524 - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 525 - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 526 - 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x0d, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 527 - 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 528 - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 529 - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x64, 0x61, 0x74, 0x65, 0x4d, 530 - 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6f, 531 - 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x65, 0x69, 0x61, 0x73, 532 - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x65, 0x65, 0x64, 0x2e, 533 - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x12, 534 - 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 535 - 0x61, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 536 - 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 537 - 0x43, 0x0a, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0f, 538 - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x65, 0x69, 0x61, 0x73, 0x6f, 0x2e, 0x6e, 0x65, 539 - 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x65, 0x65, 0x64, 0x2e, 0x41, 0x74, 0x74, 0x61, 540 - 0x63, 0x68, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 541 - 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa6, 0x01, 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 542 - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 543 - 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6d, 0x65, 0x5f, 0x74, 544 - 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, 0x6d, 0x65, 0x54, 545 - 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 546 - 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x69, 0x7a, 547 - 0x65, 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 548 - 0x52, 0x0b, 0x73, 0x69, 0x7a, 0x65, 0x49, 0x6e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x0a, 549 - 0x13, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x63, 550 - 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x64, 0x75, 0x72, 0x61, 551 - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x42, 0x25, 0x5a, 552 - 0x23, 0x78, 0x65, 0x69, 0x61, 0x73, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x76, 0x34, 0x2f, 0x70, 553 - 0x62, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 554 - 0x66, 0x65, 0x65, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 568 + 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xee, 0x02, 0x0a, 0x04, 0x46, 0x65, 0x65, 569 + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 570 + 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x68, 0x6f, 0x6d, 0x65, 0x5f, 571 + 0x70, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 572 + 0x68, 0x6f, 0x6d, 0x65, 0x50, 0x61, 0x67, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x66, 573 + 0x65, 0x65, 0x64, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 574 + 0x65, 0x65, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 575 + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 576 + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 577 + 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 578 + 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x69, 579 + 0x63, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 580 + 0x18, 0x0a, 0x07, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 581 + 0x52, 0x07, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x07, 0x61, 0x75, 0x74, 582 + 0x68, 0x6f, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x65, 0x69, 583 + 0x61, 0x73, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x65, 0x65, 584 + 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 585 + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x0a, 0x20, 586 + 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 587 + 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 588 + 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 589 + 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x65, 0x69, 0x61, 0x73, 0x6f, 0x2e, 590 + 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x65, 0x65, 0x64, 0x2e, 0x49, 0x74, 591 + 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x46, 0x0a, 0x06, 0x41, 0x75, 0x74, 592 + 0x68, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 593 + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 594 + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, 595 + 0x74, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 596 + 0x72, 0x22, 0xab, 0x04, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 597 + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 598 + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 599 + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 600 + 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x72, 0x6c, 0x12, 601 + 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 602 + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 603 + 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 604 + 0x74, 0x65, 0x6e, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 605 + 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x74, 0x6d, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 606 + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x74, 0x6d, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x73, 607 + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 608 + 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x08, 609 + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x62, 610 + 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 611 + 0x09, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x41, 612 + 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 613 + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 614 + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 615 + 0x6d, 0x70, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 616 + 0x64, 0x12, 0x3f, 0x0a, 0x0d, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 617 + 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 618 + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 619 + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 620 + 0x65, 0x64, 0x12, 0x36, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x18, 0x0c, 0x20, 621 + 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x65, 0x69, 0x61, 0x73, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 622 + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x65, 0x65, 0x64, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 623 + 0x72, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 624 + 0x67, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1a, 625 + 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 626 + 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x61, 0x74, 627 + 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 628 + 0x21, 0x2e, 0x78, 0x65, 0x69, 0x61, 0x73, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 629 + 0x74, 0x6f, 0x66, 0x65, 0x65, 0x64, 0x2e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x6d, 0x65, 630 + 0x6e, 0x74, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 631 + 0xa6, 0x01, 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 632 + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 633 + 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 634 + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 635 + 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 636 + 0x69, 0x74, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x69, 0x6e, 0x5f, 637 + 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x69, 0x7a, 638 + 0x65, 0x49, 0x6e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x64, 0x75, 0x72, 0x61, 639 + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 640 + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 641 + 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x42, 0x25, 0x5a, 0x23, 0x78, 0x65, 0x69, 0x61, 642 + 0x73, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x2f, 0x76, 0x34, 0x2f, 0x70, 0x62, 0x2f, 0x65, 0x78, 0x74, 643 + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x65, 0x65, 0x64, 0x62, 644 + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 555 645 } 556 646 557 647 var (
+47 -8
pb/openapi.json
··· 2 2 "components": { 3 3 "schemas": { 4 4 "xeiaso.net.BuildInfo": { 5 + "description": "BuildInfo contains metadata about a build of the site.", 5 6 "properties": { 6 7 "build_time": { 8 + "description": "When the site was last rebuilt", 7 9 "format": "date-time", 8 10 "type": "string" 9 11 }, 10 12 "commit": { 13 + "description": "The commit of Xe/site that was built", 11 14 "type": "string" 12 15 }, 13 16 "deno_version": { 17 + "description": "The version of Deno used to build the site", 14 18 "type": "string" 15 19 }, 16 20 "go_version": { 21 + "description": "The version of Go running on the server", 17 22 "type": "string" 18 23 }, 19 24 "xesite_version": { 25 + "description": "The version of the xesite binary", 20 26 "type": "string" 21 27 } 22 28 }, 23 29 "type": "object" 24 30 }, 25 31 "xeiaso.net.protofeed.Attachement": { 32 + "description": "Attachement is an object representing a file associated with an item.", 26 33 "properties": { 27 34 "duration_in_seconds": { 35 + "description": "(optional, number) specifies how long it takes to listen to or watch, when\nplayed at normal speed.", 28 36 "format": "int32", 29 37 "type": "integer" 30 38 }, 31 39 "mime_type": { 40 + "description": "(required, string) specifies the type of the attachment, such as\n“audio/mpeg.”", 32 41 "type": "string" 33 42 }, 34 43 "size_in_bytes": { 44 + "description": "(optional, number) specifies how large the file is.", 35 45 "format": "int32", 36 46 "type": "integer" 37 47 }, 38 48 "title": { 49 + "description": "(optional, string) specifies the title of the attachment.", 39 50 "type": "string" 40 51 }, 41 52 "url": { 53 + "description": "(required, string) specifies the location of the attachment.", 42 54 "type": "string" 43 55 } 44 56 }, 45 57 "type": "object" 46 58 }, 47 59 "xeiaso.net.protofeed.Author": { 60 + "description": "Author is an object representing the author of the feed or item.", 48 61 "properties": { 49 62 "avatar": { 63 + "description": "(optional, string) is the URL for an image for the author. As with icon, it\nshould be square and relatively large — such as 512 x 512 pixels — and\nshould use transparency where appropriate, since it may be rendered on a\nnon-white background.", 50 64 "type": "string" 51 65 }, 52 66 "name": { 67 + "description": "(optional, string) is the author’s name.", 53 68 "type": "string" 54 69 }, 55 70 "url": { 71 + "description": "(optional, string) is the URL of a site owned by the author. It could be a\nblog, micro-blog, Twitter account, and so on. Ideally the linked-to page\nprovides a way to contact the author, but that’s not required. The URL\ncould be a mailto: link, though we suspect that will be rare.", 56 72 "type": "string" 57 73 } 58 74 }, 59 75 "type": "object" 60 76 }, 61 77 "xeiaso.net.protofeed.Feed": { 78 + "description": "Feed is the root of a Proto Feed document. A feed must at least contain a\ntitle and items.", 62 79 "properties": { 63 80 "authors": { 81 + "description": "(optional, array of objects) specifies the feed authors.", 64 82 "items": { 65 83 "$ref": "#/components/schemas/xeiaso.net.protofeed.Author" 66 84 }, 67 85 "type": "array" 68 86 }, 69 87 "description": { 88 + "description": "(optional, string) provides more detail, beyond the title, on what the feed\nis about. A feed reader may display this text.", 70 89 "type": "string" 71 90 }, 72 91 "expired": { 92 + "description": "(optional, boolean) says whether or not the feed is finished — that is,\nwhether or not it will ever update again. A feed for a temporary event,\nsuch as an instance of the Olympics, could expire. If the value is true,\nthen it’s expired. Any other value, or the absence of expired, means the\nfeed may continue to update.", 73 93 "type": "boolean" 74 94 }, 75 95 "favicon": { 96 + "description": "(optional, string) is the URL of an image for the feed suitable to be used\nin a source list. It should be square and relatively small, but not smaller\nthan 64 x 64.", 76 97 "type": "string" 77 98 }, 78 99 "feed_url": { 100 + "description": "(optional but strongly recommended, string) is the URL of the feed, and\nserves as the unique identifier for the feed. As with home_page_url, this\nshould be considered required for feeds on the public web.", 79 101 "type": "string" 80 102 }, 81 103 "home_page_url": { 104 + "description": "(optional but strongly recommended, string) is the URL of the resource that\nthe feed describes. This resource may or may not actually be a “home” page,\nbut it should be an HTML page. If a feed is published on the public web,\nthis should be considered as required. But it may not make sense in the\ncase of a file created on a desktop computer, when that file is not shared\nor is shared only privately.", 82 105 "type": "string" 83 106 }, 84 107 "icon": { 108 + "description": "(optional, string) is the URL of an image for the feed suitable to be used\nin a source list. It should be square and relatively large — such as 512 x\n512 — so that it can be scaled down and so that it can look good on retina\ndisplays. It should use transparency where appropriate, since it may be\nrendered on a non-white background.", 85 109 "type": "string" 86 110 }, 87 111 "items": { 112 + "description": "(required, array of objects) contains the items in the feed. This is the\nmost important element of the feed after the version field. Each item is a\nstory, blog post, article, photograph, video, or other thing. For example,\nif a feed contains a long article, a podcast episode, and a photo, those\nthree items would be included in items.", 88 113 "items": { 89 114 "$ref": "#/components/schemas/xeiaso.net.protofeed.Item" 90 115 }, 91 116 "type": "array" 92 117 }, 93 118 "language": { 94 - "type": "string" 95 - }, 96 - "next_url": { 119 + "description": "(optional, string) is the primary language for the feed.", 97 120 "type": "string" 98 121 }, 99 122 "title": { 123 + "description": "(required, string) is the name of the feed, which will often correspond to\nthe name of the website (blog, for instance), though not necessarily.", 100 124 "type": "string" 101 125 }, 102 126 "user_comment": { 103 - "type": "string" 104 - }, 105 - "version": { 127 + "description": "(optional, string) is a description of the purpose of the feed. This is for\nthe use of people looking at the raw Protobuf, and should be ignored by\nfeed readers.", 106 128 "type": "string" 107 129 } 108 130 }, 109 131 "type": "object" 110 132 }, 111 133 "xeiaso.net.protofeed.Item": { 134 + "description": "Item is an object representing a single story, blog post, article,\nphotograph, video, or other thing within a feed.", 112 135 "properties": { 113 136 "attachments": { 137 + "description": "(optional, array of objects) specifies the attachments associated with the\nitem. Attachments are files that are associated with an item. The value of\nthe attachments field is an array of objects, each of which has a url\nfield, and other fields as specified in the attachment object definition.", 114 138 "items": { 115 139 "$ref": "#/components/schemas/xeiaso.net.protofeed.Attachement" 116 140 }, 117 141 "type": "array" 118 142 }, 119 143 "authors": { 144 + "description": "(optional, array of objects) has the same structure as the top-level\nauthors. If not specified in an item, then the top-level authors, if\npresent, are the authors of the item.", 120 145 "items": { 121 146 "$ref": "#/components/schemas/xeiaso.net.protofeed.Author" 122 147 }, 123 148 "type": "array" 124 149 }, 125 150 "banner_image": { 151 + "description": "(optional, string) is the URL of an image to use as a banner. Some blogging\nsystems (such as Medium) display a different banner image in the list view\nfrom the detail view. In those systems, this image should be used in the\nlist view, and image in the detail view.", 126 152 "type": "string" 127 153 }, 128 154 "content_html": { 155 + "description": "(optional, string) is the body of the item. It can be plain text, HTML, or\na snippet of Markdown. (It should not be the entire Markdown document; just\na snippet.) This is complete enough that it can be displayed alone in a\nreader.", 129 156 "type": "string" 130 157 }, 131 158 "content_text": { 159 + "description": "(optional, string) is the body of the item. It can be plain text, HTML, or\na snippet of Markdown. (It should not be the entire Markdown document; just\na snippet.) This is complete enough that it can be displayed alone in a\nreader.", 132 160 "type": "string" 133 161 }, 134 162 "date_modified": { 163 + "description": "(optional, string) specifies the modification date in RFC 3339 format.", 135 164 "format": "date-time", 136 165 "type": "string" 137 166 }, 138 167 "date_published": { 168 + "description": "(optional, string) specifies the date in RFC 3339 format.", 139 169 "format": "date-time", 140 170 "type": "string" 141 171 }, 142 172 "external_url": { 173 + "description": "(optional, string) is the URL of a page elsewhere. This is especially\nuseful for linkblogs. If url links to where you’re talking about a thing,\nthen external_url links to the thing you’re talking about.", 143 174 "type": "string" 144 175 }, 145 176 "id": { 177 + "description": "(required, string) is unique for that item for that feed over time. If an\nitem is ever updated, the id should be unchanged. New items should never\nuse a previously-used id. If an id is presented as a number or other type,\na JSON Feed reader must coerce it to a string. Ideally, the id is the full\nURL of the resource described by the item, since URLs make great unique\nidentifiers.", 146 178 "type": "string" 147 179 }, 148 180 "image": { 181 + "description": "(optional, string) is the URL of the main image for the item. This image\nmay also appear in the content_html — if so, it’s a hint to the feed reader\nthat this is the main, featured image. Even if it’s not, it will appear in\nthe detail view. Images should be square, with a 4:3 aspect ratio. (We will\nbe flexible on this in the future.)", 149 182 "type": "string" 150 183 }, 151 184 "language": { 185 + "description": "(optional, string) is the language for this item, using the same format as\nthe top-level language field. The value can be different than the primary\nlanguage for the feed when a specific item is written in a different\nlanguage than other items in the feed.", 152 186 "type": "string" 153 187 }, 154 188 "summary": { 189 + "description": "(optional, string) is a plain text sentence or two describing the item.\nThis might be presented in a timeline, for instance, where a detail view\nwould display all of content_html or content_text.", 155 190 "type": "string" 156 191 }, 157 192 "tags": { 193 + "description": "(optional, array of strings) can have any plain text values you want. Tags\ntend to be just one word, but they may be anything. Note: they are not the\nequivalent of Twitter hashtags. Some blogging systems and other feed\nformats call these categories.", 158 194 "items": { 195 + "description": "(optional, array of strings) can have any plain text values you want. Tags\ntend to be just one word, but they may be anything. Note: they are not the\nequivalent of Twitter hashtags. Some blogging systems and other feed\nformats call these categories.", 159 196 "type": "string" 160 197 }, 161 198 "type": "array" 162 199 }, 163 200 "title": { 201 + "description": "(optional, string) is plain text. Microblog items in particular may omit\ntitles.", 164 202 "type": "string" 165 203 }, 166 204 "url": { 205 + "description": "(optional, string) is the URL of the resource described by the item. It’s\nthe permalink. This may be the same as the id — but should be present\nregardless.", 167 206 "type": "string" 168 207 } 169 208 }, ··· 179 218 "paths": { 180 219 "/api/xeiaso.net.Feed/Get": { 181 220 "post": { 182 - "description": "\nGet fetches the current feed of posts", 221 + "description": "\nGet fetches the current feed of posts.", 183 222 "requestBody": { 184 223 "content": { 185 224 "application/json": {} ··· 202 241 }, 203 242 "/api/xeiaso.net.Meta/Metadata": { 204 243 "post": { 205 - "description": "\nMetadata fetches the build metadata of the version of xesite that is currently running", 244 + "description": "\nMetadata fetches the build metadata of the version of xesite that is\ncurrently running.", 206 245 "requestBody": { 207 246 "content": { 208 247 "application/json": {}
+11 -5
pb/xesite.pb.go
··· 23 23 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) 24 24 ) 25 25 26 + // BuildInfo contains metadata about a build of the site. 26 27 type BuildInfo struct { 27 28 state protoimpl.MessageState 28 29 sizeCache protoimpl.SizeCache 29 30 unknownFields protoimpl.UnknownFields 30 31 31 - Commit string `protobuf:"bytes,1,opt,name=commit,proto3" json:"commit,omitempty"` 32 - BuildTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=build_time,json=buildTime,proto3" json:"build_time,omitempty"` 33 - GoVersion string `protobuf:"bytes,3,opt,name=go_version,json=goVersion,proto3" json:"go_version,omitempty"` 34 - DenoVersion string `protobuf:"bytes,4,opt,name=deno_version,json=denoVersion,proto3" json:"deno_version,omitempty"` 35 - XesiteVersion string `protobuf:"bytes,5,opt,name=xesite_version,json=xesiteVersion,proto3" json:"xesite_version,omitempty"` 32 + // The commit of Xe/site that was built 33 + Commit string `protobuf:"bytes,1,opt,name=commit,proto3" json:"commit,omitempty"` 34 + // When the site was last rebuilt 35 + BuildTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=build_time,json=buildTime,proto3" json:"build_time,omitempty"` 36 + // The version of Go running on the server 37 + GoVersion string `protobuf:"bytes,3,opt,name=go_version,json=goVersion,proto3" json:"go_version,omitempty"` 38 + // The version of Deno used to build the site 39 + DenoVersion string `protobuf:"bytes,4,opt,name=deno_version,json=denoVersion,proto3" json:"deno_version,omitempty"` 40 + // The version of the xesite binary 41 + XesiteVersion string `protobuf:"bytes,5,opt,name=xesite_version,json=xesiteVersion,proto3" json:"xesite_version,omitempty"` 36 42 } 37 43 38 44 func (x *BuildInfo) Reset() {
+11 -2
pb/xesite.proto
··· 7 7 8 8 import "external/protofeed.proto"; 9 9 10 + // Meta lets users fetch site metadata. 10 11 service Meta { 11 - // Metadata fetches the build metadata of the version of xesite that is currently running 12 + // Metadata fetches the build metadata of the version of xesite that is 13 + // currently running. 12 14 rpc Metadata(google.protobuf.Empty) returns (BuildInfo); 13 15 } 14 16 17 + // BuildInfo contains metadata about a build of the site. 15 18 message BuildInfo { 19 + // The commit of Xe/site that was built 16 20 string commit = 1; 21 + // When the site was last rebuilt 17 22 google.protobuf.Timestamp build_time = 2; 23 + // The version of Go running on the server 18 24 string go_version = 3; 25 + // The version of Deno used to build the site 19 26 string deno_version = 4; 27 + // The version of the xesite binary 20 28 string xesite_version = 5; 21 29 } 22 30 31 + // Feed lets users fetch the current feed of posts. 23 32 service Feed { 24 - // Get fetches the current feed of posts 33 + // Get fetches the current feed of posts. 25 34 rpc Get(google.protobuf.Empty) returns (xeiaso.net.protofeed.Feed); 26 35 }
+5 -2
pb/xesite.twirp.go
··· 34 34 // Meta Interface 35 35 // ============== 36 36 37 + // Meta lets users fetch site metadata. 37 38 type Meta interface { 38 - // Metadata fetches the build metadata of the version of xesite that is currently running 39 + // Metadata fetches the build metadata of the version of xesite that is 40 + // currently running. 39 41 Metadata(context.Context, *google_protobuf.Empty) (*BuildInfo, error) 40 42 } 41 43 ··· 529 531 // Feed Interface 530 532 // ============== 531 533 534 + // Feed lets users fetch the current feed of posts. 532 535 type Feed interface { 533 - // Get fetches the current feed of posts 536 + // Get fetches the current feed of posts. 534 537 Get(context.Context, *google_protobuf.Empty) (*xeiaso_net_protofeed.Feed, error) 535 538 } 536 539