// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.6
// 	protoc        v5.29.3
// source: post.proto

package generated

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
	unsafe "unsafe"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// Comprehensive enums with unique prefixes
type PostStatus int32

const (
	PostStatus_POST_UNKNOWN   PostStatus = 0
	PostStatus_POST_DRAFT     PostStatus = 1
	PostStatus_POST_PUBLISHED PostStatus = 2
	PostStatus_POST_ARCHIVED  PostStatus = 3
	PostStatus_POST_DELETED   PostStatus = 4
)

// Enum value maps for PostStatus.
var (
	PostStatus_name = map[int32]string{
		0: "POST_UNKNOWN",
		1: "POST_DRAFT",
		2: "POST_PUBLISHED",
		3: "POST_ARCHIVED",
		4: "POST_DELETED",
	}
	PostStatus_value = map[string]int32{
		"POST_UNKNOWN":   0,
		"POST_DRAFT":     1,
		"POST_PUBLISHED": 2,
		"POST_ARCHIVED":  3,
		"POST_DELETED":   4,
	}
)

func (x PostStatus) Enum() *PostStatus {
	p := new(PostStatus)
	*p = x
	return p
}

func (x PostStatus) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (PostStatus) Descriptor() protoreflect.EnumDescriptor {
	return file_post_proto_enumTypes[0].Descriptor()
}

func (PostStatus) Type() protoreflect.EnumType {
	return &file_post_proto_enumTypes[0]
}

func (x PostStatus) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use PostStatus.Descriptor instead.
func (PostStatus) EnumDescriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{0}
}

type TextFormat int32

const (
	TextFormat_TEXT_UNKNOWN  TextFormat = 0
	TextFormat_TEXT_PLAIN    TextFormat = 1
	TextFormat_TEXT_MARKDOWN TextFormat = 2
	TextFormat_TEXT_HTML     TextFormat = 3
	TextFormat_TEXT_RICH     TextFormat = 4
)

// Enum value maps for TextFormat.
var (
	TextFormat_name = map[int32]string{
		0: "TEXT_UNKNOWN",
		1: "TEXT_PLAIN",
		2: "TEXT_MARKDOWN",
		3: "TEXT_HTML",
		4: "TEXT_RICH",
	}
	TextFormat_value = map[string]int32{
		"TEXT_UNKNOWN":  0,
		"TEXT_PLAIN":    1,
		"TEXT_MARKDOWN": 2,
		"TEXT_HTML":     3,
		"TEXT_RICH":     4,
	}
)

func (x TextFormat) Enum() *TextFormat {
	p := new(TextFormat)
	*p = x
	return p
}

func (x TextFormat) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (TextFormat) Descriptor() protoreflect.EnumDescriptor {
	return file_post_proto_enumTypes[1].Descriptor()
}

func (TextFormat) Type() protoreflect.EnumType {
	return &file_post_proto_enumTypes[1]
}

func (x TextFormat) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use TextFormat.Descriptor instead.
func (TextFormat) EnumDescriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{1}
}

type VideoQuality int32

const (
	VideoQuality_VIDEO_QUALITY_UNKNOWN VideoQuality = 0
	VideoQuality_VIDEO_QUALITY_240P    VideoQuality = 1
	VideoQuality_VIDEO_QUALITY_480P    VideoQuality = 2
	VideoQuality_VIDEO_QUALITY_720P    VideoQuality = 3
	VideoQuality_VIDEO_QUALITY_1080P   VideoQuality = 4
	VideoQuality_VIDEO_QUALITY_4K      VideoQuality = 5
)

// Enum value maps for VideoQuality.
var (
	VideoQuality_name = map[int32]string{
		0: "VIDEO_QUALITY_UNKNOWN",
		1: "VIDEO_QUALITY_240P",
		2: "VIDEO_QUALITY_480P",
		3: "VIDEO_QUALITY_720P",
		4: "VIDEO_QUALITY_1080P",
		5: "VIDEO_QUALITY_4K",
	}
	VideoQuality_value = map[string]int32{
		"VIDEO_QUALITY_UNKNOWN": 0,
		"VIDEO_QUALITY_240P":    1,
		"VIDEO_QUALITY_480P":    2,
		"VIDEO_QUALITY_720P":    3,
		"VIDEO_QUALITY_1080P":   4,
		"VIDEO_QUALITY_4K":      5,
	}
)

func (x VideoQuality) Enum() *VideoQuality {
	p := new(VideoQuality)
	*p = x
	return p
}

func (x VideoQuality) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (VideoQuality) Descriptor() protoreflect.EnumDescriptor {
	return file_post_proto_enumTypes[2].Descriptor()
}

func (VideoQuality) Type() protoreflect.EnumType {
	return &file_post_proto_enumTypes[2]
}

func (x VideoQuality) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use VideoQuality.Descriptor instead.
func (VideoQuality) EnumDescriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{2}
}

type PreviewStatus int32

const (
	PreviewStatus_PREVIEW_UNKNOWN PreviewStatus = 0
	PreviewStatus_PREVIEW_LOADING PreviewStatus = 1
	PreviewStatus_PREVIEW_LOADED  PreviewStatus = 2
	PreviewStatus_PREVIEW_ERROR   PreviewStatus = 3
	PreviewStatus_PREVIEW_BLOCKED PreviewStatus = 4
)

// Enum value maps for PreviewStatus.
var (
	PreviewStatus_name = map[int32]string{
		0: "PREVIEW_UNKNOWN",
		1: "PREVIEW_LOADING",
		2: "PREVIEW_LOADED",
		3: "PREVIEW_ERROR",
		4: "PREVIEW_BLOCKED",
	}
	PreviewStatus_value = map[string]int32{
		"PREVIEW_UNKNOWN": 0,
		"PREVIEW_LOADING": 1,
		"PREVIEW_LOADED":  2,
		"PREVIEW_ERROR":   3,
		"PREVIEW_BLOCKED": 4,
	}
)

func (x PreviewStatus) Enum() *PreviewStatus {
	p := new(PreviewStatus)
	*p = x
	return p
}

func (x PreviewStatus) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (PreviewStatus) Descriptor() protoreflect.EnumDescriptor {
	return file_post_proto_enumTypes[3].Descriptor()
}

func (PreviewStatus) Type() protoreflect.EnumType {
	return &file_post_proto_enumTypes[3]
}

func (x PreviewStatus) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use PreviewStatus.Descriptor instead.
func (PreviewStatus) EnumDescriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{3}
}

type CommentStatus int32

const (
	CommentStatus_COMMENT_UNKNOWN CommentStatus = 0
	CommentStatus_COMMENT_VISIBLE CommentStatus = 1
	CommentStatus_COMMENT_HIDDEN  CommentStatus = 2
	CommentStatus_COMMENT_DELETED CommentStatus = 3
	CommentStatus_COMMENT_FLAGGED CommentStatus = 4
)

// Enum value maps for CommentStatus.
var (
	CommentStatus_name = map[int32]string{
		0: "COMMENT_UNKNOWN",
		1: "COMMENT_VISIBLE",
		2: "COMMENT_HIDDEN",
		3: "COMMENT_DELETED",
		4: "COMMENT_FLAGGED",
	}
	CommentStatus_value = map[string]int32{
		"COMMENT_UNKNOWN": 0,
		"COMMENT_VISIBLE": 1,
		"COMMENT_HIDDEN":  2,
		"COMMENT_DELETED": 3,
		"COMMENT_FLAGGED": 4,
	}
)

func (x CommentStatus) Enum() *CommentStatus {
	p := new(CommentStatus)
	*p = x
	return p
}

func (x CommentStatus) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (CommentStatus) Descriptor() protoreflect.EnumDescriptor {
	return file_post_proto_enumTypes[4].Descriptor()
}

func (CommentStatus) Type() protoreflect.EnumType {
	return &file_post_proto_enumTypes[4]
}

func (x CommentStatus) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use CommentStatus.Descriptor instead.
func (CommentStatus) EnumDescriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{4}
}

type ReplyType int32

const (
	ReplyType_REPLY_UNKNOWN ReplyType = 0
	ReplyType_REPLY_DIRECT  ReplyType = 1
	ReplyType_REPLY_MENTION ReplyType = 2
	ReplyType_REPLY_QUOTE   ReplyType = 3
)

// Enum value maps for ReplyType.
var (
	ReplyType_name = map[int32]string{
		0: "REPLY_UNKNOWN",
		1: "REPLY_DIRECT",
		2: "REPLY_MENTION",
		3: "REPLY_QUOTE",
	}
	ReplyType_value = map[string]int32{
		"REPLY_UNKNOWN": 0,
		"REPLY_DIRECT":  1,
		"REPLY_MENTION": 2,
		"REPLY_QUOTE":   3,
	}
)

func (x ReplyType) Enum() *ReplyType {
	p := new(ReplyType)
	*p = x
	return p
}

func (x ReplyType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (ReplyType) Descriptor() protoreflect.EnumDescriptor {
	return file_post_proto_enumTypes[5].Descriptor()
}

func (ReplyType) Type() protoreflect.EnumType {
	return &file_post_proto_enumTypes[5]
}

func (x ReplyType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use ReplyType.Descriptor instead.
func (ReplyType) EnumDescriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{5}
}

type MediaType int32

const (
	MediaType_MEDIA_UNKNOWN  MediaType = 0
	MediaType_MEDIA_IMAGE    MediaType = 1
	MediaType_MEDIA_VIDEO    MediaType = 2
	MediaType_MEDIA_AUDIO    MediaType = 3
	MediaType_MEDIA_DOCUMENT MediaType = 4
)

// Enum value maps for MediaType.
var (
	MediaType_name = map[int32]string{
		0: "MEDIA_UNKNOWN",
		1: "MEDIA_IMAGE",
		2: "MEDIA_VIDEO",
		3: "MEDIA_AUDIO",
		4: "MEDIA_DOCUMENT",
	}
	MediaType_value = map[string]int32{
		"MEDIA_UNKNOWN":  0,
		"MEDIA_IMAGE":    1,
		"MEDIA_VIDEO":    2,
		"MEDIA_AUDIO":    3,
		"MEDIA_DOCUMENT": 4,
	}
)

func (x MediaType) Enum() *MediaType {
	p := new(MediaType)
	*p = x
	return p
}

func (x MediaType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (MediaType) Descriptor() protoreflect.EnumDescriptor {
	return file_post_proto_enumTypes[6].Descriptor()
}

func (MediaType) Type() protoreflect.EnumType {
	return &file_post_proto_enumTypes[6]
}

func (x MediaType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use MediaType.Descriptor instead.
func (MediaType) EnumDescriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{6}
}

type MetricType int32

const (
	MetricType_METRIC_UNKNOWN    MetricType = 0
	MetricType_METRIC_ENGAGEMENT MetricType = 1
	MetricType_METRIC_VIEWS      MetricType = 2
	MetricType_METRIC_SHARES     MetricType = 3
	MetricType_METRIC_COMMENTS   MetricType = 4
)

// Enum value maps for MetricType.
var (
	MetricType_name = map[int32]string{
		0: "METRIC_UNKNOWN",
		1: "METRIC_ENGAGEMENT",
		2: "METRIC_VIEWS",
		3: "METRIC_SHARES",
		4: "METRIC_COMMENTS",
	}
	MetricType_value = map[string]int32{
		"METRIC_UNKNOWN":    0,
		"METRIC_ENGAGEMENT": 1,
		"METRIC_VIEWS":      2,
		"METRIC_SHARES":     3,
		"METRIC_COMMENTS":   4,
	}
)

func (x MetricType) Enum() *MetricType {
	p := new(MetricType)
	*p = x
	return p
}

func (x MetricType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (MetricType) Descriptor() protoreflect.EnumDescriptor {
	return file_post_proto_enumTypes[7].Descriptor()
}

func (MetricType) Type() protoreflect.EnumType {
	return &file_post_proto_enumTypes[7]
}

func (x MetricType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use MetricType.Descriptor instead.
func (MetricType) EnumDescriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{7}
}

type CategoryType int32

const (
	CategoryType_CATEGORY_UNKNOWN   CategoryType = 0
	CategoryType_CATEGORY_PRIMARY   CategoryType = 1
	CategoryType_CATEGORY_SECONDARY CategoryType = 2
	CategoryType_CATEGORY_TAG       CategoryType = 3
)

// Enum value maps for CategoryType.
var (
	CategoryType_name = map[int32]string{
		0: "CATEGORY_UNKNOWN",
		1: "CATEGORY_PRIMARY",
		2: "CATEGORY_SECONDARY",
		3: "CATEGORY_TAG",
	}
	CategoryType_value = map[string]int32{
		"CATEGORY_UNKNOWN":   0,
		"CATEGORY_PRIMARY":   1,
		"CATEGORY_SECONDARY": 2,
		"CATEGORY_TAG":       3,
	}
)

func (x CategoryType) Enum() *CategoryType {
	p := new(CategoryType)
	*p = x
	return p
}

func (x CategoryType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (CategoryType) Descriptor() protoreflect.EnumDescriptor {
	return file_post_proto_enumTypes[8].Descriptor()
}

func (CategoryType) Type() protoreflect.EnumType {
	return &file_post_proto_enumTypes[8]
}

func (x CategoryType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use CategoryType.Descriptor instead.
func (CategoryType) EnumDescriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{8}
}

type ContentRating int32

const (
	ContentRating_RATING_UNKNOWN ContentRating = 0
	ContentRating_RATING_GENERAL ContentRating = 1
	ContentRating_RATING_TEEN    ContentRating = 2
	ContentRating_RATING_MATURE  ContentRating = 3
	ContentRating_RATING_ADULT   ContentRating = 4
)

// Enum value maps for ContentRating.
var (
	ContentRating_name = map[int32]string{
		0: "RATING_UNKNOWN",
		1: "RATING_GENERAL",
		2: "RATING_TEEN",
		3: "RATING_MATURE",
		4: "RATING_ADULT",
	}
	ContentRating_value = map[string]int32{
		"RATING_UNKNOWN": 0,
		"RATING_GENERAL": 1,
		"RATING_TEEN":    2,
		"RATING_MATURE":  3,
		"RATING_ADULT":   4,
	}
)

func (x ContentRating) Enum() *ContentRating {
	p := new(ContentRating)
	*p = x
	return p
}

func (x ContentRating) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (ContentRating) Descriptor() protoreflect.EnumDescriptor {
	return file_post_proto_enumTypes[9].Descriptor()
}

func (ContentRating) Type() protoreflect.EnumType {
	return &file_post_proto_enumTypes[9]
}

func (x ContentRating) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use ContentRating.Descriptor instead.
func (ContentRating) EnumDescriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{9}
}

type ContentFlag int32

const (
	ContentFlag_FLAG_NONE          ContentFlag = 0
	ContentFlag_FLAG_SPAM          ContentFlag = 1
	ContentFlag_FLAG_INAPPROPRIATE ContentFlag = 2
	ContentFlag_FLAG_COPYRIGHT     ContentFlag = 3
	ContentFlag_FLAG_VIOLENCE      ContentFlag = 4
)

// Enum value maps for ContentFlag.
var (
	ContentFlag_name = map[int32]string{
		0: "FLAG_NONE",
		1: "FLAG_SPAM",
		2: "FLAG_INAPPROPRIATE",
		3: "FLAG_COPYRIGHT",
		4: "FLAG_VIOLENCE",
	}
	ContentFlag_value = map[string]int32{
		"FLAG_NONE":          0,
		"FLAG_SPAM":          1,
		"FLAG_INAPPROPRIATE": 2,
		"FLAG_COPYRIGHT":     3,
		"FLAG_VIOLENCE":      4,
	}
)

func (x ContentFlag) Enum() *ContentFlag {
	p := new(ContentFlag)
	*p = x
	return p
}

func (x ContentFlag) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (ContentFlag) Descriptor() protoreflect.EnumDescriptor {
	return file_post_proto_enumTypes[10].Descriptor()
}

func (ContentFlag) Type() protoreflect.EnumType {
	return &file_post_proto_enumTypes[10]
}

func (x ContentFlag) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use ContentFlag.Descriptor instead.
func (ContentFlag) EnumDescriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{10}
}

type CollaboratorRole int32

const (
	CollaboratorRole_ROLE_UNKNOWN   CollaboratorRole = 0
	CollaboratorRole_ROLE_VIEWER    CollaboratorRole = 1
	CollaboratorRole_ROLE_COMMENTER CollaboratorRole = 2
	CollaboratorRole_ROLE_EDITOR    CollaboratorRole = 3
	CollaboratorRole_ROLE_ADMIN     CollaboratorRole = 4
)

// Enum value maps for CollaboratorRole.
var (
	CollaboratorRole_name = map[int32]string{
		0: "ROLE_UNKNOWN",
		1: "ROLE_VIEWER",
		2: "ROLE_COMMENTER",
		3: "ROLE_EDITOR",
		4: "ROLE_ADMIN",
	}
	CollaboratorRole_value = map[string]int32{
		"ROLE_UNKNOWN":   0,
		"ROLE_VIEWER":    1,
		"ROLE_COMMENTER": 2,
		"ROLE_EDITOR":    3,
		"ROLE_ADMIN":     4,
	}
)

func (x CollaboratorRole) Enum() *CollaboratorRole {
	p := new(CollaboratorRole)
	*p = x
	return p
}

func (x CollaboratorRole) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (CollaboratorRole) Descriptor() protoreflect.EnumDescriptor {
	return file_post_proto_enumTypes[11].Descriptor()
}

func (CollaboratorRole) Type() protoreflect.EnumType {
	return &file_post_proto_enumTypes[11]
}

func (x CollaboratorRole) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use CollaboratorRole.Descriptor instead.
func (CollaboratorRole) EnumDescriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{11}
}

// Comprehensive Post message demonstrating all protobuf features
type Post struct {
	state     protoimpl.MessageState `protogen:"open.v1"`
	Id        int32                  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	Title     string                 `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
	AuthorId  int32                  `protobuf:"varint,3,opt,name=author_id,json=authorId,proto3" json:"author_id,omitempty"`
	Status    PostStatus             `protobuf:"varint,4,opt,name=status,proto3,enum=benchmark.PostStatus" json:"status,omitempty"`
	Tags      []string               `protobuf:"bytes,5,rep,name=tags,proto3" json:"tags,omitempty"`
	CreatedAt int64                  `protobuf:"varint,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
	UpdatedAt int64                  `protobuf:"varint,7,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"`
	ViewCount int32                  `protobuf:"varint,8,opt,name=view_count,json=viewCount,proto3" json:"view_count,omitempty"`
	Featured  bool                   `protobuf:"varint,9,opt,name=featured,proto3" json:"featured,omitempty"`
	Rating    ContentRating          `protobuf:"varint,10,opt,name=rating,proto3,enum=benchmark.ContentRating" json:"rating,omitempty"`
	Flags     []ContentFlag          `protobuf:"varint,11,rep,packed,name=flags,proto3,enum=benchmark.ContentFlag" json:"flags,omitempty"`
	// oneof content - demonstrates different content types
	//
	// Types that are valid to be assigned to Content:
	//
	//	*Post_TextContent
	//	*Post_VideoContent
	//	*Post_ImageContent
	//	*Post_LinkContent
	Content isPost_Content `protobuf_oneof:"content"`
	// Multiple map types with different key/value combinations
	Metrics    map[string]*PostMetric   `protobuf:"bytes,16,rep,name=metrics,proto3" json:"metrics,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`       // map<string, PostMetric>
	Revisions  map[int32]string         `protobuf:"bytes,17,rep,name=revisions,proto3" json:"revisions,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`  // map<int32, string>
	Analytics  map[string]float64       `protobuf:"bytes,18,rep,name=analytics,proto3" json:"analytics,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` // map<string, double>
	Categories map[string]*CategoryInfo `protobuf:"bytes,19,rep,name=categories,proto3" json:"categories,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // map<string, CategoryInfo>
	// Nested repeated comments with recursive structure
	Comments []*Comment `protobuf:"bytes,20,rep,name=comments,proto3" json:"comments,omitempty"`
	// Post metadata with nested structures
	Metadata      *PostMetadata `protobuf:"bytes,21,opt,name=metadata,proto3" json:"metadata,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *Post) Reset() {
	*x = Post{}
	mi := &file_post_proto_msgTypes[0]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Post) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Post) ProtoMessage() {}

func (x *Post) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[0]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Post.ProtoReflect.Descriptor instead.
func (*Post) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{0}
}

func (x *Post) GetId() int32 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *Post) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *Post) GetAuthorId() int32 {
	if x != nil {
		return x.AuthorId
	}
	return 0
}

func (x *Post) GetStatus() PostStatus {
	if x != nil {
		return x.Status
	}
	return PostStatus_POST_UNKNOWN
}

func (x *Post) GetTags() []string {
	if x != nil {
		return x.Tags
	}
	return nil
}

func (x *Post) GetCreatedAt() int64 {
	if x != nil {
		return x.CreatedAt
	}
	return 0
}

func (x *Post) GetUpdatedAt() int64 {
	if x != nil {
		return x.UpdatedAt
	}
	return 0
}

func (x *Post) GetViewCount() int32 {
	if x != nil {
		return x.ViewCount
	}
	return 0
}

func (x *Post) GetFeatured() bool {
	if x != nil {
		return x.Featured
	}
	return false
}

func (x *Post) GetRating() ContentRating {
	if x != nil {
		return x.Rating
	}
	return ContentRating_RATING_UNKNOWN
}

func (x *Post) GetFlags() []ContentFlag {
	if x != nil {
		return x.Flags
	}
	return nil
}

func (x *Post) GetContent() isPost_Content {
	if x != nil {
		return x.Content
	}
	return nil
}

func (x *Post) GetTextContent() *TextContent {
	if x != nil {
		if x, ok := x.Content.(*Post_TextContent); ok {
			return x.TextContent
		}
	}
	return nil
}

func (x *Post) GetVideoContent() *VideoContent {
	if x != nil {
		if x, ok := x.Content.(*Post_VideoContent); ok {
			return x.VideoContent
		}
	}
	return nil
}

func (x *Post) GetImageContent() *ImageContent {
	if x != nil {
		if x, ok := x.Content.(*Post_ImageContent); ok {
			return x.ImageContent
		}
	}
	return nil
}

func (x *Post) GetLinkContent() *LinkContent {
	if x != nil {
		if x, ok := x.Content.(*Post_LinkContent); ok {
			return x.LinkContent
		}
	}
	return nil
}

func (x *Post) GetMetrics() map[string]*PostMetric {
	if x != nil {
		return x.Metrics
	}
	return nil
}

func (x *Post) GetRevisions() map[int32]string {
	if x != nil {
		return x.Revisions
	}
	return nil
}

func (x *Post) GetAnalytics() map[string]float64 {
	if x != nil {
		return x.Analytics
	}
	return nil
}

func (x *Post) GetCategories() map[string]*CategoryInfo {
	if x != nil {
		return x.Categories
	}
	return nil
}

func (x *Post) GetComments() []*Comment {
	if x != nil {
		return x.Comments
	}
	return nil
}

func (x *Post) GetMetadata() *PostMetadata {
	if x != nil {
		return x.Metadata
	}
	return nil
}

type isPost_Content interface {
	isPost_Content()
}

type Post_TextContent struct {
	TextContent *TextContent `protobuf:"bytes,12,opt,name=text_content,json=textContent,proto3,oneof"`
}

type Post_VideoContent struct {
	VideoContent *VideoContent `protobuf:"bytes,13,opt,name=video_content,json=videoContent,proto3,oneof"`
}

type Post_ImageContent struct {
	ImageContent *ImageContent `protobuf:"bytes,14,opt,name=image_content,json=imageContent,proto3,oneof"`
}

type Post_LinkContent struct {
	LinkContent *LinkContent `protobuf:"bytes,15,opt,name=link_content,json=linkContent,proto3,oneof"`
}

func (*Post_TextContent) isPost_Content() {}

func (*Post_VideoContent) isPost_Content() {}

func (*Post_ImageContent) isPost_Content() {}

func (*Post_LinkContent) isPost_Content() {}

// Content types for oneof
type TextContent struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Body          string                 `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"`
	Format        TextFormat             `protobuf:"varint,2,opt,name=format,proto3,enum=benchmark.TextFormat" json:"format,omitempty"`
	WordCount     int32                  `protobuf:"varint,3,opt,name=word_count,json=wordCount,proto3" json:"word_count,omitempty"`
	Footnotes     []string               `protobuf:"bytes,4,rep,name=footnotes,proto3" json:"footnotes,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *TextContent) Reset() {
	*x = TextContent{}
	mi := &file_post_proto_msgTypes[1]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TextContent) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TextContent) ProtoMessage() {}

func (x *TextContent) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[1]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use TextContent.ProtoReflect.Descriptor instead.
func (*TextContent) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{1}
}

func (x *TextContent) GetBody() string {
	if x != nil {
		return x.Body
	}
	return ""
}

func (x *TextContent) GetFormat() TextFormat {
	if x != nil {
		return x.Format
	}
	return TextFormat_TEXT_UNKNOWN
}

func (x *TextContent) GetWordCount() int32 {
	if x != nil {
		return x.WordCount
	}
	return 0
}

func (x *TextContent) GetFootnotes() []string {
	if x != nil {
		return x.Footnotes
	}
	return nil
}

type VideoContent struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	VideoUrl        string                 `protobuf:"bytes,1,opt,name=video_url,json=videoUrl,proto3" json:"video_url,omitempty"`
	ThumbnailUrl    string                 `protobuf:"bytes,2,opt,name=thumbnail_url,json=thumbnailUrl,proto3" json:"thumbnail_url,omitempty"`
	DurationSeconds int32                  `protobuf:"varint,3,opt,name=duration_seconds,json=durationSeconds,proto3" json:"duration_seconds,omitempty"`
	Quality         VideoQuality           `protobuf:"varint,4,opt,name=quality,proto3,enum=benchmark.VideoQuality" json:"quality,omitempty"`
	Subtitles       []string               `protobuf:"bytes,5,rep,name=subtitles,proto3" json:"subtitles,omitempty"`
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *VideoContent) Reset() {
	*x = VideoContent{}
	mi := &file_post_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *VideoContent) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*VideoContent) ProtoMessage() {}

func (x *VideoContent) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[2]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use VideoContent.ProtoReflect.Descriptor instead.
func (*VideoContent) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{2}
}

func (x *VideoContent) GetVideoUrl() string {
	if x != nil {
		return x.VideoUrl
	}
	return ""
}

func (x *VideoContent) GetThumbnailUrl() string {
	if x != nil {
		return x.ThumbnailUrl
	}
	return ""
}

func (x *VideoContent) GetDurationSeconds() int32 {
	if x != nil {
		return x.DurationSeconds
	}
	return 0
}

func (x *VideoContent) GetQuality() VideoQuality {
	if x != nil {
		return x.Quality
	}
	return VideoQuality_VIDEO_QUALITY_UNKNOWN
}

func (x *VideoContent) GetSubtitles() []string {
	if x != nil {
		return x.Subtitles
	}
	return nil
}

type ImageContent struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	ImageUrls     []string               `protobuf:"bytes,1,rep,name=image_urls,json=imageUrls,proto3" json:"image_urls,omitempty"`
	Caption       string                 `protobuf:"bytes,2,opt,name=caption,proto3" json:"caption,omitempty"`
	AltTexts      []string               `protobuf:"bytes,3,rep,name=alt_texts,json=altTexts,proto3" json:"alt_texts,omitempty"`
	Photographer  string                 `protobuf:"bytes,4,opt,name=photographer,proto3" json:"photographer,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ImageContent) Reset() {
	*x = ImageContent{}
	mi := &file_post_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ImageContent) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ImageContent) ProtoMessage() {}

func (x *ImageContent) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[3]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ImageContent.ProtoReflect.Descriptor instead.
func (*ImageContent) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{3}
}

func (x *ImageContent) GetImageUrls() []string {
	if x != nil {
		return x.ImageUrls
	}
	return nil
}

func (x *ImageContent) GetCaption() string {
	if x != nil {
		return x.Caption
	}
	return ""
}

func (x *ImageContent) GetAltTexts() []string {
	if x != nil {
		return x.AltTexts
	}
	return nil
}

func (x *ImageContent) GetPhotographer() string {
	if x != nil {
		return x.Photographer
	}
	return ""
}

type LinkContent struct {
	state              protoimpl.MessageState `protogen:"open.v1"`
	Url                string                 `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
	PreviewTitle       string                 `protobuf:"bytes,2,opt,name=preview_title,json=previewTitle,proto3" json:"preview_title,omitempty"`
	PreviewDescription string                 `protobuf:"bytes,3,opt,name=preview_description,json=previewDescription,proto3" json:"preview_description,omitempty"`
	PreviewImage       string                 `protobuf:"bytes,4,opt,name=preview_image,json=previewImage,proto3" json:"preview_image,omitempty"`
	PreviewStatus      PreviewStatus          `protobuf:"varint,5,opt,name=preview_status,json=previewStatus,proto3,enum=benchmark.PreviewStatus" json:"preview_status,omitempty"`
	unknownFields      protoimpl.UnknownFields
	sizeCache          protoimpl.SizeCache
}

func (x *LinkContent) Reset() {
	*x = LinkContent{}
	mi := &file_post_proto_msgTypes[4]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LinkContent) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LinkContent) ProtoMessage() {}

func (x *LinkContent) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[4]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LinkContent.ProtoReflect.Descriptor instead.
func (*LinkContent) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{4}
}

func (x *LinkContent) GetUrl() string {
	if x != nil {
		return x.Url
	}
	return ""
}

func (x *LinkContent) GetPreviewTitle() string {
	if x != nil {
		return x.PreviewTitle
	}
	return ""
}

func (x *LinkContent) GetPreviewDescription() string {
	if x != nil {
		return x.PreviewDescription
	}
	return ""
}

func (x *LinkContent) GetPreviewImage() string {
	if x != nil {
		return x.PreviewImage
	}
	return ""
}

func (x *LinkContent) GetPreviewStatus() PreviewStatus {
	if x != nil {
		return x.PreviewStatus
	}
	return PreviewStatus_PREVIEW_UNKNOWN
}

// PostMetric for maps
type PostMetric struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Value         float64                `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"`
	Unit          string                 `protobuf:"bytes,2,opt,name=unit,proto3" json:"unit,omitempty"`
	LastUpdated   int64                  `protobuf:"varint,3,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"`
	Type          MetricType             `protobuf:"varint,4,opt,name=type,proto3,enum=benchmark.MetricType" json:"type,omitempty"`
	History       []*MetricHistory       `protobuf:"bytes,5,rep,name=history,proto3" json:"history,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *PostMetric) Reset() {
	*x = PostMetric{}
	mi := &file_post_proto_msgTypes[5]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *PostMetric) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*PostMetric) ProtoMessage() {}

func (x *PostMetric) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[5]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use PostMetric.ProtoReflect.Descriptor instead.
func (*PostMetric) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{5}
}

func (x *PostMetric) GetValue() float64 {
	if x != nil {
		return x.Value
	}
	return 0
}

func (x *PostMetric) GetUnit() string {
	if x != nil {
		return x.Unit
	}
	return ""
}

func (x *PostMetric) GetLastUpdated() int64 {
	if x != nil {
		return x.LastUpdated
	}
	return 0
}

func (x *PostMetric) GetType() MetricType {
	if x != nil {
		return x.Type
	}
	return MetricType_METRIC_UNKNOWN
}

func (x *PostMetric) GetHistory() []*MetricHistory {
	if x != nil {
		return x.History
	}
	return nil
}

type MetricHistory struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Timestamp     int64                  `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
	Value         float64                `protobuf:"fixed64,2,opt,name=value,proto3" json:"value,omitempty"`
	Label         string                 `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *MetricHistory) Reset() {
	*x = MetricHistory{}
	mi := &file_post_proto_msgTypes[6]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *MetricHistory) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MetricHistory) ProtoMessage() {}

func (x *MetricHistory) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[6]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MetricHistory.ProtoReflect.Descriptor instead.
func (*MetricHistory) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{6}
}

func (x *MetricHistory) GetTimestamp() int64 {
	if x != nil {
		return x.Timestamp
	}
	return 0
}

func (x *MetricHistory) GetValue() float64 {
	if x != nil {
		return x.Value
	}
	return 0
}

func (x *MetricHistory) GetLabel() string {
	if x != nil {
		return x.Label
	}
	return ""
}

// CategoryInfo for maps
type CategoryInfo struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	Name          string                 `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Description   string                 `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
	Type          CategoryType           `protobuf:"varint,3,opt,name=type,proto3,enum=benchmark.CategoryType" json:"type,omitempty"`
	PostCount     int32                  `protobuf:"varint,4,opt,name=post_count,json=postCount,proto3" json:"post_count,omitempty"`
	Subcategories []string               `protobuf:"bytes,5,rep,name=subcategories,proto3" json:"subcategories,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *CategoryInfo) Reset() {
	*x = CategoryInfo{}
	mi := &file_post_proto_msgTypes[7]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CategoryInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CategoryInfo) ProtoMessage() {}

func (x *CategoryInfo) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[7]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CategoryInfo.ProtoReflect.Descriptor instead.
func (*CategoryInfo) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{7}
}

func (x *CategoryInfo) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *CategoryInfo) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

func (x *CategoryInfo) GetType() CategoryType {
	if x != nil {
		return x.Type
	}
	return CategoryType_CATEGORY_UNKNOWN
}

func (x *CategoryInfo) GetPostCount() int32 {
	if x != nil {
		return x.PostCount
	}
	return 0
}

func (x *CategoryInfo) GetSubcategories() []string {
	if x != nil {
		return x.Subcategories
	}
	return nil
}

// Comment with recursive structure
type Comment struct {
	state     protoimpl.MessageState `protogen:"open.v1"`
	Id        int32                  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	UserId    int32                  `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	Username  string                 `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"`
	Content   string                 `protobuf:"bytes,4,opt,name=content,proto3" json:"content,omitempty"`
	CreatedAt int64                  `protobuf:"varint,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
	UpdatedAt int64                  `protobuf:"varint,6,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"`
	Status    CommentStatus          `protobuf:"varint,7,opt,name=status,proto3,enum=benchmark.CommentStatus" json:"status,omitempty"`
	Likes     int32                  `protobuf:"varint,8,opt,name=likes,proto3" json:"likes,omitempty"`
	Pinned    bool                   `protobuf:"varint,9,opt,name=pinned,proto3" json:"pinned,omitempty"`
	Metadata  map[string]string      `protobuf:"bytes,10,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	// oneof comment_type
	//
	// Types that are valid to be assigned to CommentType:
	//
	//	*Comment_TextComment
	//	*Comment_MediaComment
	CommentType isComment_CommentType `protobuf_oneof:"comment_type"`
	// Recursive structure - replies can contain nested replies
	Replies       []*Reply `protobuf:"bytes,13,rep,name=replies,proto3" json:"replies,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *Comment) Reset() {
	*x = Comment{}
	mi := &file_post_proto_msgTypes[8]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Comment) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Comment) ProtoMessage() {}

func (x *Comment) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[8]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Comment.ProtoReflect.Descriptor instead.
func (*Comment) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{8}
}

func (x *Comment) GetId() int32 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *Comment) GetUserId() int32 {
	if x != nil {
		return x.UserId
	}
	return 0
}

func (x *Comment) GetUsername() string {
	if x != nil {
		return x.Username
	}
	return ""
}

func (x *Comment) GetContent() string {
	if x != nil {
		return x.Content
	}
	return ""
}

func (x *Comment) GetCreatedAt() int64 {
	if x != nil {
		return x.CreatedAt
	}
	return 0
}

func (x *Comment) GetUpdatedAt() int64 {
	if x != nil {
		return x.UpdatedAt
	}
	return 0
}

func (x *Comment) GetStatus() CommentStatus {
	if x != nil {
		return x.Status
	}
	return CommentStatus_COMMENT_UNKNOWN
}

func (x *Comment) GetLikes() int32 {
	if x != nil {
		return x.Likes
	}
	return 0
}

func (x *Comment) GetPinned() bool {
	if x != nil {
		return x.Pinned
	}
	return false
}

func (x *Comment) GetMetadata() map[string]string {
	if x != nil {
		return x.Metadata
	}
	return nil
}

func (x *Comment) GetCommentType() isComment_CommentType {
	if x != nil {
		return x.CommentType
	}
	return nil
}

func (x *Comment) GetTextComment() *TextComment {
	if x != nil {
		if x, ok := x.CommentType.(*Comment_TextComment); ok {
			return x.TextComment
		}
	}
	return nil
}

func (x *Comment) GetMediaComment() *MediaComment {
	if x != nil {
		if x, ok := x.CommentType.(*Comment_MediaComment); ok {
			return x.MediaComment
		}
	}
	return nil
}

func (x *Comment) GetReplies() []*Reply {
	if x != nil {
		return x.Replies
	}
	return nil
}

type isComment_CommentType interface {
	isComment_CommentType()
}

type Comment_TextComment struct {
	TextComment *TextComment `protobuf:"bytes,11,opt,name=text_comment,json=textComment,proto3,oneof"`
}

type Comment_MediaComment struct {
	MediaComment *MediaComment `protobuf:"bytes,12,opt,name=media_comment,json=mediaComment,proto3,oneof"`
}

func (*Comment_TextComment) isComment_CommentType() {}

func (*Comment_MediaComment) isComment_CommentType() {}

// Comment types
type TextComment struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	FormattedText string                 `protobuf:"bytes,1,opt,name=formatted_text,json=formattedText,proto3" json:"formatted_text,omitempty"`
	Format        TextFormat             `protobuf:"varint,2,opt,name=format,proto3,enum=benchmark.TextFormat" json:"format,omitempty"`
	Mentions      []string               `protobuf:"bytes,3,rep,name=mentions,proto3" json:"mentions,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *TextComment) Reset() {
	*x = TextComment{}
	mi := &file_post_proto_msgTypes[9]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *TextComment) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TextComment) ProtoMessage() {}

func (x *TextComment) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[9]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use TextComment.ProtoReflect.Descriptor instead.
func (*TextComment) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{9}
}

func (x *TextComment) GetFormattedText() string {
	if x != nil {
		return x.FormattedText
	}
	return ""
}

func (x *TextComment) GetFormat() TextFormat {
	if x != nil {
		return x.Format
	}
	return TextFormat_TEXT_UNKNOWN
}

func (x *TextComment) GetMentions() []string {
	if x != nil {
		return x.Mentions
	}
	return nil
}

type MediaComment struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	MediaUrls     []string               `protobuf:"bytes,1,rep,name=media_urls,json=mediaUrls,proto3" json:"media_urls,omitempty"`
	MediaType     MediaType              `protobuf:"varint,2,opt,name=media_type,json=mediaType,proto3,enum=benchmark.MediaType" json:"media_type,omitempty"`
	Description   string                 `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *MediaComment) Reset() {
	*x = MediaComment{}
	mi := &file_post_proto_msgTypes[10]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *MediaComment) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MediaComment) ProtoMessage() {}

func (x *MediaComment) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[10]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MediaComment.ProtoReflect.Descriptor instead.
func (*MediaComment) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{10}
}

func (x *MediaComment) GetMediaUrls() []string {
	if x != nil {
		return x.MediaUrls
	}
	return nil
}

func (x *MediaComment) GetMediaType() MediaType {
	if x != nil {
		return x.MediaType
	}
	return MediaType_MEDIA_UNKNOWN
}

func (x *MediaComment) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

// Reply with recursive structure
type Reply struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	Id              int32                  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	UserId          int32                  `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	Username        string                 `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"`
	Content         string                 `protobuf:"bytes,4,opt,name=content,proto3" json:"content,omitempty"`
	CreatedAt       int64                  `protobuf:"varint,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
	ParentCommentId int32                  `protobuf:"varint,6,opt,name=parent_comment_id,json=parentCommentId,proto3" json:"parent_comment_id,omitempty"`
	Type            ReplyType              `protobuf:"varint,7,opt,name=type,proto3,enum=benchmark.ReplyType" json:"type,omitempty"`
	Likes           int32                  `protobuf:"varint,8,opt,name=likes,proto3" json:"likes,omitempty"`
	// Recursive - replies can contain more nested replies
	NestedReplies []*Reply `protobuf:"bytes,9,rep,name=nested_replies,json=nestedReplies,proto3" json:"nested_replies,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *Reply) Reset() {
	*x = Reply{}
	mi := &file_post_proto_msgTypes[11]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Reply) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Reply) ProtoMessage() {}

func (x *Reply) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[11]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Reply.ProtoReflect.Descriptor instead.
func (*Reply) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{11}
}

func (x *Reply) GetId() int32 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *Reply) GetUserId() int32 {
	if x != nil {
		return x.UserId
	}
	return 0
}

func (x *Reply) GetUsername() string {
	if x != nil {
		return x.Username
	}
	return ""
}

func (x *Reply) GetContent() string {
	if x != nil {
		return x.Content
	}
	return ""
}

func (x *Reply) GetCreatedAt() int64 {
	if x != nil {
		return x.CreatedAt
	}
	return 0
}

func (x *Reply) GetParentCommentId() int32 {
	if x != nil {
		return x.ParentCommentId
	}
	return 0
}

func (x *Reply) GetType() ReplyType {
	if x != nil {
		return x.Type
	}
	return ReplyType_REPLY_UNKNOWN
}

func (x *Reply) GetLikes() int32 {
	if x != nil {
		return x.Likes
	}
	return 0
}

func (x *Reply) GetNestedReplies() []*Reply {
	if x != nil {
		return x.NestedReplies
	}
	return nil
}

// Post metadata
type PostMetadata struct {
	state          protoimpl.MessageState `protogen:"open.v1"`
	SeoTitle       string                 `protobuf:"bytes,1,opt,name=seo_title,json=seoTitle,proto3" json:"seo_title,omitempty"`
	SeoDescription string                 `protobuf:"bytes,2,opt,name=seo_description,json=seoDescription,proto3" json:"seo_description,omitempty"`
	Keywords       []string               `protobuf:"bytes,3,rep,name=keywords,proto3" json:"keywords,omitempty"`
	CustomFields   map[string]string      `protobuf:"bytes,4,rep,name=custom_fields,json=customFields,proto3" json:"custom_fields,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	SocialMeta     *SocialMetadata        `protobuf:"bytes,5,opt,name=social_meta,json=socialMeta,proto3" json:"social_meta,omitempty"`
	Collaborators  []*Collaborator        `protobuf:"bytes,6,rep,name=collaborators,proto3" json:"collaborators,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *PostMetadata) Reset() {
	*x = PostMetadata{}
	mi := &file_post_proto_msgTypes[12]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *PostMetadata) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*PostMetadata) ProtoMessage() {}

func (x *PostMetadata) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[12]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use PostMetadata.ProtoReflect.Descriptor instead.
func (*PostMetadata) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{12}
}

func (x *PostMetadata) GetSeoTitle() string {
	if x != nil {
		return x.SeoTitle
	}
	return ""
}

func (x *PostMetadata) GetSeoDescription() string {
	if x != nil {
		return x.SeoDescription
	}
	return ""
}

func (x *PostMetadata) GetKeywords() []string {
	if x != nil {
		return x.Keywords
	}
	return nil
}

func (x *PostMetadata) GetCustomFields() map[string]string {
	if x != nil {
		return x.CustomFields
	}
	return nil
}

func (x *PostMetadata) GetSocialMeta() *SocialMetadata {
	if x != nil {
		return x.SocialMeta
	}
	return nil
}

func (x *PostMetadata) GetCollaborators() []*Collaborator {
	if x != nil {
		return x.Collaborators
	}
	return nil
}

type SocialMetadata struct {
	state            protoimpl.MessageState `protogen:"open.v1"`
	OgTitle          string                 `protobuf:"bytes,1,opt,name=og_title,json=ogTitle,proto3" json:"og_title,omitempty"`
	OgDescription    string                 `protobuf:"bytes,2,opt,name=og_description,json=ogDescription,proto3" json:"og_description,omitempty"`
	OgImage          string                 `protobuf:"bytes,3,opt,name=og_image,json=ogImage,proto3" json:"og_image,omitempty"`
	TwitterCard      string                 `protobuf:"bytes,4,opt,name=twitter_card,json=twitterCard,proto3" json:"twitter_card,omitempty"`
	PlatformSpecific map[string]string      `protobuf:"bytes,5,rep,name=platform_specific,json=platformSpecific,proto3" json:"platform_specific,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	unknownFields    protoimpl.UnknownFields
	sizeCache        protoimpl.SizeCache
}

func (x *SocialMetadata) Reset() {
	*x = SocialMetadata{}
	mi := &file_post_proto_msgTypes[13]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *SocialMetadata) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*SocialMetadata) ProtoMessage() {}

func (x *SocialMetadata) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[13]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use SocialMetadata.ProtoReflect.Descriptor instead.
func (*SocialMetadata) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{13}
}

func (x *SocialMetadata) GetOgTitle() string {
	if x != nil {
		return x.OgTitle
	}
	return ""
}

func (x *SocialMetadata) GetOgDescription() string {
	if x != nil {
		return x.OgDescription
	}
	return ""
}

func (x *SocialMetadata) GetOgImage() string {
	if x != nil {
		return x.OgImage
	}
	return ""
}

func (x *SocialMetadata) GetTwitterCard() string {
	if x != nil {
		return x.TwitterCard
	}
	return ""
}

func (x *SocialMetadata) GetPlatformSpecific() map[string]string {
	if x != nil {
		return x.PlatformSpecific
	}
	return nil
}

type Collaborator struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	UserId        int32                  `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
	Username      string                 `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"`
	Role          CollaboratorRole       `protobuf:"varint,3,opt,name=role,proto3,enum=benchmark.CollaboratorRole" json:"role,omitempty"`
	Permissions   []string               `protobuf:"bytes,4,rep,name=permissions,proto3" json:"permissions,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *Collaborator) Reset() {
	*x = Collaborator{}
	mi := &file_post_proto_msgTypes[14]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Collaborator) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Collaborator) ProtoMessage() {}

func (x *Collaborator) ProtoReflect() protoreflect.Message {
	mi := &file_post_proto_msgTypes[14]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Collaborator.ProtoReflect.Descriptor instead.
func (*Collaborator) Descriptor() ([]byte, []int) {
	return file_post_proto_rawDescGZIP(), []int{14}
}

func (x *Collaborator) GetUserId() int32 {
	if x != nil {
		return x.UserId
	}
	return 0
}

func (x *Collaborator) GetUsername() string {
	if x != nil {
		return x.Username
	}
	return ""
}

func (x *Collaborator) GetRole() CollaboratorRole {
	if x != nil {
		return x.Role
	}
	return CollaboratorRole_ROLE_UNKNOWN
}

func (x *Collaborator) GetPermissions() []string {
	if x != nil {
		return x.Permissions
	}
	return nil
}

var File_post_proto protoreflect.FileDescriptor

const file_post_proto_rawDesc = "" +
	"\n" +
	"\n" +
	"post.proto\x12\tbenchmark\"\xeb\t\n" +
	"\x04Post\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\x05R\x02id\x12\x14\n" +
	"\x05title\x18\x02 \x01(\tR\x05title\x12\x1b\n" +
	"\tauthor_id\x18\x03 \x01(\x05R\bauthorId\x12-\n" +
	"\x06status\x18\x04 \x01(\x0e2\x15.benchmark.PostStatusR\x06status\x12\x12\n" +
	"\x04tags\x18\x05 \x03(\tR\x04tags\x12\x1d\n" +
	"\n" +
	"created_at\x18\x06 \x01(\x03R\tcreatedAt\x12\x1d\n" +
	"\n" +
	"updated_at\x18\a \x01(\x03R\tupdatedAt\x12\x1d\n" +
	"\n" +
	"view_count\x18\b \x01(\x05R\tviewCount\x12\x1a\n" +
	"\bfeatured\x18\t \x01(\bR\bfeatured\x120\n" +
	"\x06rating\x18\n" +
	" \x01(\x0e2\x18.benchmark.ContentRatingR\x06rating\x12,\n" +
	"\x05flags\x18\v \x03(\x0e2\x16.benchmark.ContentFlagR\x05flags\x12;\n" +
	"\ftext_content\x18\f \x01(\v2\x16.benchmark.TextContentH\x00R\vtextContent\x12>\n" +
	"\rvideo_content\x18\r \x01(\v2\x17.benchmark.VideoContentH\x00R\fvideoContent\x12>\n" +
	"\rimage_content\x18\x0e \x01(\v2\x17.benchmark.ImageContentH\x00R\fimageContent\x12;\n" +
	"\flink_content\x18\x0f \x01(\v2\x16.benchmark.LinkContentH\x00R\vlinkContent\x126\n" +
	"\ametrics\x18\x10 \x03(\v2\x1c.benchmark.Post.MetricsEntryR\ametrics\x12<\n" +
	"\trevisions\x18\x11 \x03(\v2\x1e.benchmark.Post.RevisionsEntryR\trevisions\x12<\n" +
	"\tanalytics\x18\x12 \x03(\v2\x1e.benchmark.Post.AnalyticsEntryR\tanalytics\x12?\n" +
	"\n" +
	"categories\x18\x13 \x03(\v2\x1f.benchmark.Post.CategoriesEntryR\n" +
	"categories\x12.\n" +
	"\bcomments\x18\x14 \x03(\v2\x12.benchmark.CommentR\bcomments\x123\n" +
	"\bmetadata\x18\x15 \x01(\v2\x17.benchmark.PostMetadataR\bmetadata\x1aQ\n" +
	"\fMetricsEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12+\n" +
	"\x05value\x18\x02 \x01(\v2\x15.benchmark.PostMetricR\x05value:\x028\x01\x1a<\n" +
	"\x0eRevisionsEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\x05R\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1a<\n" +
	"\x0eAnalyticsEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\x01R\x05value:\x028\x01\x1aV\n" +
	"\x0fCategoriesEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12-\n" +
	"\x05value\x18\x02 \x01(\v2\x17.benchmark.CategoryInfoR\x05value:\x028\x01B\t\n" +
	"\acontent\"\x8d\x01\n" +
	"\vTextContent\x12\x12\n" +
	"\x04body\x18\x01 \x01(\tR\x04body\x12-\n" +
	"\x06format\x18\x02 \x01(\x0e2\x15.benchmark.TextFormatR\x06format\x12\x1d\n" +
	"\n" +
	"word_count\x18\x03 \x01(\x05R\twordCount\x12\x1c\n" +
	"\tfootnotes\x18\x04 \x03(\tR\tfootnotes\"\xcc\x01\n" +
	"\fVideoContent\x12\x1b\n" +
	"\tvideo_url\x18\x01 \x01(\tR\bvideoUrl\x12#\n" +
	"\rthumbnail_url\x18\x02 \x01(\tR\fthumbnailUrl\x12)\n" +
	"\x10duration_seconds\x18\x03 \x01(\x05R\x0fdurationSeconds\x121\n" +
	"\aquality\x18\x04 \x01(\x0e2\x17.benchmark.VideoQualityR\aquality\x12\x1c\n" +
	"\tsubtitles\x18\x05 \x03(\tR\tsubtitles\"\x88\x01\n" +
	"\fImageContent\x12\x1d\n" +
	"\n" +
	"image_urls\x18\x01 \x03(\tR\timageUrls\x12\x18\n" +
	"\acaption\x18\x02 \x01(\tR\acaption\x12\x1b\n" +
	"\talt_texts\x18\x03 \x03(\tR\baltTexts\x12\"\n" +
	"\fphotographer\x18\x04 \x01(\tR\fphotographer\"\xdb\x01\n" +
	"\vLinkContent\x12\x10\n" +
	"\x03url\x18\x01 \x01(\tR\x03url\x12#\n" +
	"\rpreview_title\x18\x02 \x01(\tR\fpreviewTitle\x12/\n" +
	"\x13preview_description\x18\x03 \x01(\tR\x12previewDescription\x12#\n" +
	"\rpreview_image\x18\x04 \x01(\tR\fpreviewImage\x12?\n" +
	"\x0epreview_status\x18\x05 \x01(\x0e2\x18.benchmark.PreviewStatusR\rpreviewStatus\"\xb8\x01\n" +
	"\n" +
	"PostMetric\x12\x14\n" +
	"\x05value\x18\x01 \x01(\x01R\x05value\x12\x12\n" +
	"\x04unit\x18\x02 \x01(\tR\x04unit\x12!\n" +
	"\flast_updated\x18\x03 \x01(\x03R\vlastUpdated\x12)\n" +
	"\x04type\x18\x04 \x01(\x0e2\x15.benchmark.MetricTypeR\x04type\x122\n" +
	"\ahistory\x18\x05 \x03(\v2\x18.benchmark.MetricHistoryR\ahistory\"Y\n" +
	"\rMetricHistory\x12\x1c\n" +
	"\ttimestamp\x18\x01 \x01(\x03R\ttimestamp\x12\x14\n" +
	"\x05value\x18\x02 \x01(\x01R\x05value\x12\x14\n" +
	"\x05label\x18\x03 \x01(\tR\x05label\"\xb6\x01\n" +
	"\fCategoryInfo\x12\x12\n" +
	"\x04name\x18\x01 \x01(\tR\x04name\x12 \n" +
	"\vdescription\x18\x02 \x01(\tR\vdescription\x12+\n" +
	"\x04type\x18\x03 \x01(\x0e2\x17.benchmark.CategoryTypeR\x04type\x12\x1d\n" +
	"\n" +
	"post_count\x18\x04 \x01(\x05R\tpostCount\x12$\n" +
	"\rsubcategories\x18\x05 \x03(\tR\rsubcategories\"\xba\x04\n" +
	"\aComment\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\x05R\x02id\x12\x17\n" +
	"\auser_id\x18\x02 \x01(\x05R\x06userId\x12\x1a\n" +
	"\busername\x18\x03 \x01(\tR\busername\x12\x18\n" +
	"\acontent\x18\x04 \x01(\tR\acontent\x12\x1d\n" +
	"\n" +
	"created_at\x18\x05 \x01(\x03R\tcreatedAt\x12\x1d\n" +
	"\n" +
	"updated_at\x18\x06 \x01(\x03R\tupdatedAt\x120\n" +
	"\x06status\x18\a \x01(\x0e2\x18.benchmark.CommentStatusR\x06status\x12\x14\n" +
	"\x05likes\x18\b \x01(\x05R\x05likes\x12\x16\n" +
	"\x06pinned\x18\t \x01(\bR\x06pinned\x12<\n" +
	"\bmetadata\x18\n" +
	" \x03(\v2 .benchmark.Comment.MetadataEntryR\bmetadata\x12;\n" +
	"\ftext_comment\x18\v \x01(\v2\x16.benchmark.TextCommentH\x00R\vtextComment\x12>\n" +
	"\rmedia_comment\x18\f \x01(\v2\x17.benchmark.MediaCommentH\x00R\fmediaComment\x12*\n" +
	"\areplies\x18\r \x03(\v2\x10.benchmark.ReplyR\areplies\x1a;\n" +
	"\rMetadataEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01B\x0e\n" +
	"\fcomment_type\"\x7f\n" +
	"\vTextComment\x12%\n" +
	"\x0eformatted_text\x18\x01 \x01(\tR\rformattedText\x12-\n" +
	"\x06format\x18\x02 \x01(\x0e2\x15.benchmark.TextFormatR\x06format\x12\x1a\n" +
	"\bmentions\x18\x03 \x03(\tR\bmentions\"\x84\x01\n" +
	"\fMediaComment\x12\x1d\n" +
	"\n" +
	"media_urls\x18\x01 \x03(\tR\tmediaUrls\x123\n" +
	"\n" +
	"media_type\x18\x02 \x01(\x0e2\x14.benchmark.MediaTypeR\tmediaType\x12 \n" +
	"\vdescription\x18\x03 \x01(\tR\vdescription\"\xaa\x02\n" +
	"\x05Reply\x12\x0e\n" +
	"\x02id\x18\x01 \x01(\x05R\x02id\x12\x17\n" +
	"\auser_id\x18\x02 \x01(\x05R\x06userId\x12\x1a\n" +
	"\busername\x18\x03 \x01(\tR\busername\x12\x18\n" +
	"\acontent\x18\x04 \x01(\tR\acontent\x12\x1d\n" +
	"\n" +
	"created_at\x18\x05 \x01(\x03R\tcreatedAt\x12*\n" +
	"\x11parent_comment_id\x18\x06 \x01(\x05R\x0fparentCommentId\x12(\n" +
	"\x04type\x18\a \x01(\x0e2\x14.benchmark.ReplyTypeR\x04type\x12\x14\n" +
	"\x05likes\x18\b \x01(\x05R\x05likes\x127\n" +
	"\x0enested_replies\x18\t \x03(\v2\x10.benchmark.ReplyR\rnestedReplies\"\xfc\x02\n" +
	"\fPostMetadata\x12\x1b\n" +
	"\tseo_title\x18\x01 \x01(\tR\bseoTitle\x12'\n" +
	"\x0fseo_description\x18\x02 \x01(\tR\x0eseoDescription\x12\x1a\n" +
	"\bkeywords\x18\x03 \x03(\tR\bkeywords\x12N\n" +
	"\rcustom_fields\x18\x04 \x03(\v2).benchmark.PostMetadata.CustomFieldsEntryR\fcustomFields\x12:\n" +
	"\vsocial_meta\x18\x05 \x01(\v2\x19.benchmark.SocialMetadataR\n" +
	"socialMeta\x12=\n" +
	"\rcollaborators\x18\x06 \x03(\v2\x17.benchmark.CollaboratorR\rcollaborators\x1a?\n" +
	"\x11CustomFieldsEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xb3\x02\n" +
	"\x0eSocialMetadata\x12\x19\n" +
	"\bog_title\x18\x01 \x01(\tR\aogTitle\x12%\n" +
	"\x0eog_description\x18\x02 \x01(\tR\rogDescription\x12\x19\n" +
	"\bog_image\x18\x03 \x01(\tR\aogImage\x12!\n" +
	"\ftwitter_card\x18\x04 \x01(\tR\vtwitterCard\x12\\\n" +
	"\x11platform_specific\x18\x05 \x03(\v2/.benchmark.SocialMetadata.PlatformSpecificEntryR\x10platformSpecific\x1aC\n" +
	"\x15PlatformSpecificEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x96\x01\n" +
	"\fCollaborator\x12\x17\n" +
	"\auser_id\x18\x01 \x01(\x05R\x06userId\x12\x1a\n" +
	"\busername\x18\x02 \x01(\tR\busername\x12/\n" +
	"\x04role\x18\x03 \x01(\x0e2\x1b.benchmark.CollaboratorRoleR\x04role\x12 \n" +
	"\vpermissions\x18\x04 \x03(\tR\vpermissions*g\n" +
	"\n" +
	"PostStatus\x12\x10\n" +
	"\fPOST_UNKNOWN\x10\x00\x12\x0e\n" +
	"\n" +
	"POST_DRAFT\x10\x01\x12\x12\n" +
	"\x0ePOST_PUBLISHED\x10\x02\x12\x11\n" +
	"\rPOST_ARCHIVED\x10\x03\x12\x10\n" +
	"\fPOST_DELETED\x10\x04*_\n" +
	"\n" +
	"TextFormat\x12\x10\n" +
	"\fTEXT_UNKNOWN\x10\x00\x12\x0e\n" +
	"\n" +
	"TEXT_PLAIN\x10\x01\x12\x11\n" +
	"\rTEXT_MARKDOWN\x10\x02\x12\r\n" +
	"\tTEXT_HTML\x10\x03\x12\r\n" +
	"\tTEXT_RICH\x10\x04*\xa0\x01\n" +
	"\fVideoQuality\x12\x19\n" +
	"\x15VIDEO_QUALITY_UNKNOWN\x10\x00\x12\x16\n" +
	"\x12VIDEO_QUALITY_240P\x10\x01\x12\x16\n" +
	"\x12VIDEO_QUALITY_480P\x10\x02\x12\x16\n" +
	"\x12VIDEO_QUALITY_720P\x10\x03\x12\x17\n" +
	"\x13VIDEO_QUALITY_1080P\x10\x04\x12\x14\n" +
	"\x10VIDEO_QUALITY_4K\x10\x05*u\n" +
	"\rPreviewStatus\x12\x13\n" +
	"\x0fPREVIEW_UNKNOWN\x10\x00\x12\x13\n" +
	"\x0fPREVIEW_LOADING\x10\x01\x12\x12\n" +
	"\x0ePREVIEW_LOADED\x10\x02\x12\x11\n" +
	"\rPREVIEW_ERROR\x10\x03\x12\x13\n" +
	"\x0fPREVIEW_BLOCKED\x10\x04*w\n" +
	"\rCommentStatus\x12\x13\n" +
	"\x0fCOMMENT_UNKNOWN\x10\x00\x12\x13\n" +
	"\x0fCOMMENT_VISIBLE\x10\x01\x12\x12\n" +
	"\x0eCOMMENT_HIDDEN\x10\x02\x12\x13\n" +
	"\x0fCOMMENT_DELETED\x10\x03\x12\x13\n" +
	"\x0fCOMMENT_FLAGGED\x10\x04*T\n" +
	"\tReplyType\x12\x11\n" +
	"\rREPLY_UNKNOWN\x10\x00\x12\x10\n" +
	"\fREPLY_DIRECT\x10\x01\x12\x11\n" +
	"\rREPLY_MENTION\x10\x02\x12\x0f\n" +
	"\vREPLY_QUOTE\x10\x03*e\n" +
	"\tMediaType\x12\x11\n" +
	"\rMEDIA_UNKNOWN\x10\x00\x12\x0f\n" +
	"\vMEDIA_IMAGE\x10\x01\x12\x0f\n" +
	"\vMEDIA_VIDEO\x10\x02\x12\x0f\n" +
	"\vMEDIA_AUDIO\x10\x03\x12\x12\n" +
	"\x0eMEDIA_DOCUMENT\x10\x04*q\n" +
	"\n" +
	"MetricType\x12\x12\n" +
	"\x0eMETRIC_UNKNOWN\x10\x00\x12\x15\n" +
	"\x11METRIC_ENGAGEMENT\x10\x01\x12\x10\n" +
	"\fMETRIC_VIEWS\x10\x02\x12\x11\n" +
	"\rMETRIC_SHARES\x10\x03\x12\x13\n" +
	"\x0fMETRIC_COMMENTS\x10\x04*d\n" +
	"\fCategoryType\x12\x14\n" +
	"\x10CATEGORY_UNKNOWN\x10\x00\x12\x14\n" +
	"\x10CATEGORY_PRIMARY\x10\x01\x12\x16\n" +
	"\x12CATEGORY_SECONDARY\x10\x02\x12\x10\n" +
	"\fCATEGORY_TAG\x10\x03*m\n" +
	"\rContentRating\x12\x12\n" +
	"\x0eRATING_UNKNOWN\x10\x00\x12\x12\n" +
	"\x0eRATING_GENERAL\x10\x01\x12\x0f\n" +
	"\vRATING_TEEN\x10\x02\x12\x11\n" +
	"\rRATING_MATURE\x10\x03\x12\x10\n" +
	"\fRATING_ADULT\x10\x04*j\n" +
	"\vContentFlag\x12\r\n" +
	"\tFLAG_NONE\x10\x00\x12\r\n" +
	"\tFLAG_SPAM\x10\x01\x12\x16\n" +
	"\x12FLAG_INAPPROPRIATE\x10\x02\x12\x12\n" +
	"\x0eFLAG_COPYRIGHT\x10\x03\x12\x11\n" +
	"\rFLAG_VIOLENCE\x10\x04*j\n" +
	"\x10CollaboratorRole\x12\x10\n" +
	"\fROLE_UNKNOWN\x10\x00\x12\x0f\n" +
	"\vROLE_VIEWER\x10\x01\x12\x12\n" +
	"\x0eROLE_COMMENTER\x10\x02\x12\x0f\n" +
	"\vROLE_EDITOR\x10\x03\x12\x0e\n" +
	"\n" +
	"ROLE_ADMIN\x10\x04B6Z4github.com/anirudhraja/protolite/benchmark/generatedb\x06proto3"

var (
	file_post_proto_rawDescOnce sync.Once
	file_post_proto_rawDescData []byte
)

func file_post_proto_rawDescGZIP() []byte {
	file_post_proto_rawDescOnce.Do(func() {
		file_post_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_post_proto_rawDesc), len(file_post_proto_rawDesc)))
	})
	return file_post_proto_rawDescData
}

var file_post_proto_enumTypes = make([]protoimpl.EnumInfo, 12)
var file_post_proto_msgTypes = make([]protoimpl.MessageInfo, 22)
var file_post_proto_goTypes = []any{
	(PostStatus)(0),        // 0: benchmark.PostStatus
	(TextFormat)(0),        // 1: benchmark.TextFormat
	(VideoQuality)(0),      // 2: benchmark.VideoQuality
	(PreviewStatus)(0),     // 3: benchmark.PreviewStatus
	(CommentStatus)(0),     // 4: benchmark.CommentStatus
	(ReplyType)(0),         // 5: benchmark.ReplyType
	(MediaType)(0),         // 6: benchmark.MediaType
	(MetricType)(0),        // 7: benchmark.MetricType
	(CategoryType)(0),      // 8: benchmark.CategoryType
	(ContentRating)(0),     // 9: benchmark.ContentRating
	(ContentFlag)(0),       // 10: benchmark.ContentFlag
	(CollaboratorRole)(0),  // 11: benchmark.CollaboratorRole
	(*Post)(nil),           // 12: benchmark.Post
	(*TextContent)(nil),    // 13: benchmark.TextContent
	(*VideoContent)(nil),   // 14: benchmark.VideoContent
	(*ImageContent)(nil),   // 15: benchmark.ImageContent
	(*LinkContent)(nil),    // 16: benchmark.LinkContent
	(*PostMetric)(nil),     // 17: benchmark.PostMetric
	(*MetricHistory)(nil),  // 18: benchmark.MetricHistory
	(*CategoryInfo)(nil),   // 19: benchmark.CategoryInfo
	(*Comment)(nil),        // 20: benchmark.Comment
	(*TextComment)(nil),    // 21: benchmark.TextComment
	(*MediaComment)(nil),   // 22: benchmark.MediaComment
	(*Reply)(nil),          // 23: benchmark.Reply
	(*PostMetadata)(nil),   // 24: benchmark.PostMetadata
	(*SocialMetadata)(nil), // 25: benchmark.SocialMetadata
	(*Collaborator)(nil),   // 26: benchmark.Collaborator
	nil,                    // 27: benchmark.Post.MetricsEntry
	nil,                    // 28: benchmark.Post.RevisionsEntry
	nil,                    // 29: benchmark.Post.AnalyticsEntry
	nil,                    // 30: benchmark.Post.CategoriesEntry
	nil,                    // 31: benchmark.Comment.MetadataEntry
	nil,                    // 32: benchmark.PostMetadata.CustomFieldsEntry
	nil,                    // 33: benchmark.SocialMetadata.PlatformSpecificEntry
}
var file_post_proto_depIdxs = []int32{
	0,  // 0: benchmark.Post.status:type_name -> benchmark.PostStatus
	9,  // 1: benchmark.Post.rating:type_name -> benchmark.ContentRating
	10, // 2: benchmark.Post.flags:type_name -> benchmark.ContentFlag
	13, // 3: benchmark.Post.text_content:type_name -> benchmark.TextContent
	14, // 4: benchmark.Post.video_content:type_name -> benchmark.VideoContent
	15, // 5: benchmark.Post.image_content:type_name -> benchmark.ImageContent
	16, // 6: benchmark.Post.link_content:type_name -> benchmark.LinkContent
	27, // 7: benchmark.Post.metrics:type_name -> benchmark.Post.MetricsEntry
	28, // 8: benchmark.Post.revisions:type_name -> benchmark.Post.RevisionsEntry
	29, // 9: benchmark.Post.analytics:type_name -> benchmark.Post.AnalyticsEntry
	30, // 10: benchmark.Post.categories:type_name -> benchmark.Post.CategoriesEntry
	20, // 11: benchmark.Post.comments:type_name -> benchmark.Comment
	24, // 12: benchmark.Post.metadata:type_name -> benchmark.PostMetadata
	1,  // 13: benchmark.TextContent.format:type_name -> benchmark.TextFormat
	2,  // 14: benchmark.VideoContent.quality:type_name -> benchmark.VideoQuality
	3,  // 15: benchmark.LinkContent.preview_status:type_name -> benchmark.PreviewStatus
	7,  // 16: benchmark.PostMetric.type:type_name -> benchmark.MetricType
	18, // 17: benchmark.PostMetric.history:type_name -> benchmark.MetricHistory
	8,  // 18: benchmark.CategoryInfo.type:type_name -> benchmark.CategoryType
	4,  // 19: benchmark.Comment.status:type_name -> benchmark.CommentStatus
	31, // 20: benchmark.Comment.metadata:type_name -> benchmark.Comment.MetadataEntry
	21, // 21: benchmark.Comment.text_comment:type_name -> benchmark.TextComment
	22, // 22: benchmark.Comment.media_comment:type_name -> benchmark.MediaComment
	23, // 23: benchmark.Comment.replies:type_name -> benchmark.Reply
	1,  // 24: benchmark.TextComment.format:type_name -> benchmark.TextFormat
	6,  // 25: benchmark.MediaComment.media_type:type_name -> benchmark.MediaType
	5,  // 26: benchmark.Reply.type:type_name -> benchmark.ReplyType
	23, // 27: benchmark.Reply.nested_replies:type_name -> benchmark.Reply
	32, // 28: benchmark.PostMetadata.custom_fields:type_name -> benchmark.PostMetadata.CustomFieldsEntry
	25, // 29: benchmark.PostMetadata.social_meta:type_name -> benchmark.SocialMetadata
	26, // 30: benchmark.PostMetadata.collaborators:type_name -> benchmark.Collaborator
	33, // 31: benchmark.SocialMetadata.platform_specific:type_name -> benchmark.SocialMetadata.PlatformSpecificEntry
	11, // 32: benchmark.Collaborator.role:type_name -> benchmark.CollaboratorRole
	17, // 33: benchmark.Post.MetricsEntry.value:type_name -> benchmark.PostMetric
	19, // 34: benchmark.Post.CategoriesEntry.value:type_name -> benchmark.CategoryInfo
	35, // [35:35] is the sub-list for method output_type
	35, // [35:35] is the sub-list for method input_type
	35, // [35:35] is the sub-list for extension type_name
	35, // [35:35] is the sub-list for extension extendee
	0,  // [0:35] is the sub-list for field type_name
}

func init() { file_post_proto_init() }
func file_post_proto_init() {
	if File_post_proto != nil {
		return
	}
	file_post_proto_msgTypes[0].OneofWrappers = []any{
		(*Post_TextContent)(nil),
		(*Post_VideoContent)(nil),
		(*Post_ImageContent)(nil),
		(*Post_LinkContent)(nil),
	}
	file_post_proto_msgTypes[8].OneofWrappers = []any{
		(*Comment_TextComment)(nil),
		(*Comment_MediaComment)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_post_proto_rawDesc), len(file_post_proto_rawDesc)),
			NumEnums:      12,
			NumMessages:   22,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_post_proto_goTypes,
		DependencyIndexes: file_post_proto_depIdxs,
		EnumInfos:         file_post_proto_enumTypes,
		MessageInfos:      file_post_proto_msgTypes,
	}.Build()
	File_post_proto = out.File
	file_post_proto_goTypes = nil
	file_post_proto_depIdxs = nil
}
