From 28c05497055989897757a76f450c97cb330e72d5 Mon Sep 17 00:00:00 2001 From: Steven Date: Sun, 17 Dec 2023 09:53:22 +0800 Subject: [PATCH] feat: add markdown service --- api/v2/markdown_service.go | 90 + api/v2/markdown_service_test.go | 30 + api/v2/memo_service.go | 32 +- api/v2/v2.go | 5 + plugin/gomark/ast/ast.go | 111 + plugin/gomark/ast/node.go | 67 - proto/api/v2/markdown_service.proto | 158 ++ proto/api/v2/memo_service.proto | 7 +- proto/gen/api/v2/README.md | 440 ++++ proto/gen/api/v2/markdown_service.pb.go | 2123 ++++++++++++++++++ proto/gen/api/v2/markdown_service.pb.gw.go | 171 ++ proto/gen/api/v2/markdown_service_grpc.pb.go | 109 + proto/gen/api/v2/memo_service.pb.go | 308 +-- 13 files changed, 3428 insertions(+), 223 deletions(-) create mode 100644 api/v2/markdown_service.go create mode 100644 api/v2/markdown_service_test.go delete mode 100644 plugin/gomark/ast/node.go create mode 100644 proto/api/v2/markdown_service.proto create mode 100644 proto/gen/api/v2/markdown_service.pb.go create mode 100644 proto/gen/api/v2/markdown_service.pb.gw.go create mode 100644 proto/gen/api/v2/markdown_service_grpc.pb.go diff --git a/api/v2/markdown_service.go b/api/v2/markdown_service.go new file mode 100644 index 00000000..81f1486d --- /dev/null +++ b/api/v2/markdown_service.go @@ -0,0 +1,90 @@ +package v2 + +import ( + "context" + + "github.com/pkg/errors" + + "github.com/usememos/memos/plugin/gomark/ast" + "github.com/usememos/memos/plugin/gomark/parser" + "github.com/usememos/memos/plugin/gomark/parser/tokenizer" + apiv2pb "github.com/usememos/memos/proto/gen/api/v2" +) + +func (*APIV2Service) ParseMarkdown(_ context.Context, request *apiv2pb.ParseMarkdownRequest) (*apiv2pb.ParseMarkdownResponse, error) { + rawNodes, err := parser.Parse(tokenizer.Tokenize(request.Markdown)) + if err != nil { + return nil, errors.Wrap(err, "failed to parse memo content") + } + nodes := convertFromASTNodes(rawNodes) + return &apiv2pb.ParseMarkdownResponse{ + Nodes: nodes, + }, nil +} + +func convertFromASTNodes(rawNodes []ast.Node) []*apiv2pb.Node { + nodes := []*apiv2pb.Node{} + for _, rawNode := range rawNodes { + node := convertFromASTNode(rawNode) + nodes = append(nodes, node) + } + return nodes +} + +func convertFromASTNode(rawNode ast.Node) *apiv2pb.Node { + node := &apiv2pb.Node{ + Type: apiv2pb.NodeType(rawNode.Type()), + } + + switch n := rawNode.(type) { + case *ast.LineBreak: + node.Node = &apiv2pb.Node_LineBreakNode{} + case *ast.Paragraph: + children := convertFromASTNodes(n.Children) + node.Node = &apiv2pb.Node_ParagraphNode{ParagraphNode: &apiv2pb.ParagraphNode{Children: children}} + case *ast.CodeBlock: + node.Node = &apiv2pb.Node_CodeBlockNode{CodeBlockNode: &apiv2pb.CodeBlockNode{Language: n.Language, Content: n.Content}} + case *ast.Heading: + children := convertFromASTNodes(n.Children) + node.Node = &apiv2pb.Node_HeadingNode{HeadingNode: &apiv2pb.HeadingNode{Level: int32(n.Level), Children: children}} + case *ast.HorizontalRule: + node.Node = &apiv2pb.Node_HorizontalRuleNode{HorizontalRuleNode: &apiv2pb.HorizontalRuleNode{Symbol: n.Symbol}} + case *ast.Blockquote: + children := convertFromASTNodes(n.Children) + node.Node = &apiv2pb.Node_BlockquoteNode{BlockquoteNode: &apiv2pb.BlockquoteNode{Children: children}} + case *ast.OrderedList: + children := convertFromASTNodes(n.Children) + node.Node = &apiv2pb.Node_OrderedListNode{OrderedListNode: &apiv2pb.OrderedListNode{Number: n.Number, Children: children}} + case *ast.UnorderedList: + children := convertFromASTNodes(n.Children) + node.Node = &apiv2pb.Node_UnorderedListNode{UnorderedListNode: &apiv2pb.UnorderedListNode{Symbol: n.Symbol, Children: children}} + case *ast.TaskList: + children := convertFromASTNodes(n.Children) + node.Node = &apiv2pb.Node_TaskListNode{TaskListNode: &apiv2pb.TaskListNode{Symbol: n.Symbol, Complete: n.Complete, Children: children}} + case *ast.Text: + node.Node = &apiv2pb.Node_TextNode{TextNode: &apiv2pb.TextNode{Content: n.Content}} + case *ast.Bold: + children := convertFromASTNodes(n.Children) + node.Node = &apiv2pb.Node_BoldNode{BoldNode: &apiv2pb.BoldNode{Symbol: n.Symbol, Children: children}} + case *ast.Italic: + node.Node = &apiv2pb.Node_ItalicNode{ItalicNode: &apiv2pb.ItalicNode{Symbol: n.Symbol, Content: n.Content}} + case *ast.BoldItalic: + node.Node = &apiv2pb.Node_BoldItalicNode{BoldItalicNode: &apiv2pb.BoldItalicNode{Symbol: n.Symbol, Content: n.Content}} + case *ast.Code: + node.Node = &apiv2pb.Node_CodeNode{CodeNode: &apiv2pb.CodeNode{Content: n.Content}} + case *ast.Image: + node.Node = &apiv2pb.Node_ImageNode{ImageNode: &apiv2pb.ImageNode{AltText: n.AltText, Url: n.URL}} + case *ast.Link: + node.Node = &apiv2pb.Node_LinkNode{LinkNode: &apiv2pb.LinkNode{Text: n.Text, Url: n.URL}} + case *ast.Tag: + node.Node = &apiv2pb.Node_TagNode{TagNode: &apiv2pb.TagNode{Content: n.Content}} + case *ast.Strikethrough: + node.Node = &apiv2pb.Node_StrikethroughNode{StrikethroughNode: &apiv2pb.StrikethroughNode{Content: n.Content}} + case *ast.EscapingCharacter: + node.Node = &apiv2pb.Node_EscapingCharacterNode{EscapingCharacterNode: &apiv2pb.EscapingCharacterNode{Symbol: n.Symbol}} + default: + node.Node = &apiv2pb.Node_TextNode{TextNode: &apiv2pb.TextNode{}} + } + + return node +} diff --git a/api/v2/markdown_service_test.go b/api/v2/markdown_service_test.go new file mode 100644 index 00000000..170cc9d3 --- /dev/null +++ b/api/v2/markdown_service_test.go @@ -0,0 +1,30 @@ +package v2 + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/usememos/memos/plugin/gomark/ast" + apiv2pb "github.com/usememos/memos/proto/gen/api/v2" +) + +func TestConvertFromASTNodes(t *testing.T) { + tests := []struct { + name string + rawNodes []ast.Node + want []*apiv2pb.Node + }{ + { + name: "empty", + want: []*apiv2pb.Node{}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := convertFromASTNodes(tt.rawNodes) + require.Equal(t, tt.want, got) + }) + } +} diff --git a/api/v2/memo_service.go b/api/v2/memo_service.go index 2b2bac5a..c36cd082 100644 --- a/api/v2/memo_service.go +++ b/api/v2/memo_service.go @@ -5,7 +5,7 @@ import ( "github.com/google/cel-go/cel" "github.com/pkg/errors" - v1alpha1 "google.golang.org/genproto/googleapis/api/expr/v1alpha1" + expr "google.golang.org/genproto/googleapis/api/expr/v1alpha1" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -32,8 +32,12 @@ func (s *APIV2Service) CreateMemo(ctx context.Context, request *apiv2pb.CreateMe return nil, err } + memoMessage, err := convertMemoFromStore(memo) + if err != nil { + return nil, errors.Wrap(err, "failed to convert memo") + } response := &apiv2pb.CreateMemoResponse{ - Memo: convertMemoFromStore(memo), + Memo: memoMessage, } return response, nil } @@ -89,7 +93,11 @@ func (s *APIV2Service) ListMemos(ctx context.Context, request *apiv2pb.ListMemos memoMessages := make([]*apiv2pb.Memo, len(memos)) for i, memo := range memos { - memoMessages[i] = convertMemoFromStore(memo) + memoMessage, err := convertMemoFromStore(memo) + if err != nil { + return nil, errors.Wrap(err, "failed to convert memo") + } + memoMessages[i] = memoMessage } response := &apiv2pb.ListMemosResponse{ @@ -121,8 +129,12 @@ func (s *APIV2Service) GetMemo(ctx context.Context, request *apiv2pb.GetMemoRequ } } + memoMessage, err := convertMemoFromStore(memo) + if err != nil { + return nil, errors.Wrap(err, "failed to convert memo") + } response := &apiv2pb.GetMemoResponse{ - Memo: convertMemoFromStore(memo), + Memo: memoMessage, } return response, nil } @@ -170,7 +182,11 @@ func (s *APIV2Service) ListMemoComments(ctx context.Context, request *apiv2pb.Li return nil, status.Errorf(codes.Internal, "failed to get memo") } if memo != nil { - memos = append(memos, convertMemoFromStore(memo)) + memoMessage, err := convertMemoFromStore(memo) + if err != nil { + return nil, errors.Wrap(err, "failed to convert memo") + } + memos = append(memos, memoMessage) } } @@ -212,7 +228,7 @@ func parseListMemosFilter(expression string) (*ListMemosFilter, error) { return filter, nil } -func findField(callExpr *v1alpha1.Expr_Call, filter *ListMemosFilter) { +func findField(callExpr *expr.Expr_Call, filter *ListMemosFilter) { if len(callExpr.Args) == 2 { idExpr := callExpr.Args[0].GetIdentExpr() if idExpr != nil { @@ -239,7 +255,7 @@ func findField(callExpr *v1alpha1.Expr_Call, filter *ListMemosFilter) { } } -func convertMemoFromStore(memo *store.Memo) *apiv2pb.Memo { +func convertMemoFromStore(memo *store.Memo) (*apiv2pb.Memo, error) { return &apiv2pb.Memo{ Id: int32(memo.ID), RowStatus: convertRowStatusFromStore(memo.RowStatus), @@ -249,7 +265,7 @@ func convertMemoFromStore(memo *store.Memo) *apiv2pb.Memo { Content: memo.Content, Visibility: convertVisibilityFromStore(memo.Visibility), Pinned: memo.Pinned, - } + }, nil } func convertVisibilityFromStore(visibility store.Visibility) apiv2pb.Visibility { diff --git a/api/v2/v2.go b/api/v2/v2.go index 2d6d9e80..2ed08149 100644 --- a/api/v2/v2.go +++ b/api/v2/v2.go @@ -26,6 +26,7 @@ type APIV2Service struct { apiv2pb.UnimplementedInboxServiceServer apiv2pb.UnimplementedActivityServiceServer apiv2pb.UnimplementedWebhookServiceServer + apiv2pb.UnimplementedMarkdownServiceServer Secret string Profile *profile.Profile @@ -60,6 +61,7 @@ func NewAPIV2Service(secret string, profile *profile.Profile, store *store.Store apiv2pb.RegisterInboxServiceServer(grpcServer, apiv2Service) apiv2pb.RegisterActivityServiceServer(grpcServer, apiv2Service) apiv2pb.RegisterWebhookServiceServer(grpcServer, apiv2Service) + apiv2pb.RegisterMarkdownServiceServer(grpcServer, apiv2Service) reflection.Register(grpcServer) return apiv2Service @@ -110,6 +112,9 @@ func (s *APIV2Service) RegisterGateway(ctx context.Context, e *echo.Echo) error if err := apiv2pb.RegisterWebhookServiceHandler(context.Background(), gwMux, conn); err != nil { return err } + if err := apiv2pb.RegisterMarkdownServiceHandler(context.Background(), gwMux, conn); err != nil { + return err + } e.Any("/api/v2/*", echo.WrapHandler(gwMux)) // GRPC web proxy. diff --git a/plugin/gomark/ast/ast.go b/plugin/gomark/ast/ast.go index bd412963..e0599415 100644 --- a/plugin/gomark/ast/ast.go +++ b/plugin/gomark/ast/ast.go @@ -1 +1,112 @@ package ast + +type NodeType uint32 + +const ( + UnknownNode NodeType = iota + // Block nodes. + LineBreakNode + ParagraphNode + CodeBlockNode + HeadingNode + HorizontalRuleNode + BlockquoteNode + OrderedListNode + UnorderedListNode + TaskListNode + // Inline nodes. + TextNode + BoldNode + ItalicNode + BoldItalicNode + CodeNode + ImageNode + LinkNode + TagNode + StrikethroughNode + EscapingCharacterNode +) + +func (t NodeType) String() string { + switch t { + case LineBreakNode: + return "LineBreakNode" + case ParagraphNode: + return "ParagraphNode" + case CodeBlockNode: + return "CodeBlockNode" + case HeadingNode: + return "HeadingNode" + case HorizontalRuleNode: + return "HorizontalRuleNode" + case BlockquoteNode: + return "BlockquoteNode" + case OrderedListNode: + return "OrderedListNode" + case UnorderedListNode: + return "UnorderedListNode" + case TaskListNode: + return "TaskListNode" + case TextNode: + return "TextNode" + case BoldNode: + return "BoldNode" + case ItalicNode: + return "ItalicNode" + case BoldItalicNode: + return "BoldItalicNode" + case CodeNode: + return "CodeNode" + case ImageNode: + return "ImageNode" + case LinkNode: + return "LinkNode" + case TagNode: + return "TagNode" + case StrikethroughNode: + return "StrikethroughNode" + case EscapingCharacterNode: + return "EscapingCharacterNode" + default: + return "UnknownNode" + } +} + +type Node interface { + // Type returns a node type. + Type() NodeType + + // PrevSibling returns a previous sibling node of this node. + PrevSibling() Node + + // NextSibling returns a next sibling node of this node. + NextSibling() Node + + // SetPrevSibling sets a previous sibling node to this node. + SetPrevSibling(Node) + + // SetNextSibling sets a next sibling node to this node. + SetNextSibling(Node) +} + +type BaseNode struct { + prevSibling Node + + nextSibling Node +} + +func (n *BaseNode) PrevSibling() Node { + return n.prevSibling +} + +func (n *BaseNode) NextSibling() Node { + return n.nextSibling +} + +func (n *BaseNode) SetPrevSibling(node Node) { + n.prevSibling = node +} + +func (n *BaseNode) SetNextSibling(node Node) { + n.nextSibling = node +} diff --git a/plugin/gomark/ast/node.go b/plugin/gomark/ast/node.go deleted file mode 100644 index 59a4162e..00000000 --- a/plugin/gomark/ast/node.go +++ /dev/null @@ -1,67 +0,0 @@ -package ast - -type NodeType uint32 - -const ( - UnknownNode NodeType = iota - // Block nodes. - LineBreakNode - ParagraphNode - CodeBlockNode - HeadingNode - HorizontalRuleNode - BlockquoteNode - OrderedListNode - UnorderedListNode - TaskListNode - // Inline nodes. - TextNode - BoldNode - ItalicNode - BoldItalicNode - CodeNode - ImageNode - LinkNode - TagNode - StrikethroughNode - EscapingCharacterNode -) - -type Node interface { - // Type returns a node type. - Type() NodeType - - // PrevSibling returns a previous sibling node of this node. - PrevSibling() Node - - // NextSibling returns a next sibling node of this node. - NextSibling() Node - - // SetPrevSibling sets a previous sibling node to this node. - SetPrevSibling(Node) - - // SetNextSibling sets a next sibling node to this node. - SetNextSibling(Node) -} - -type BaseNode struct { - prevSibling Node - - nextSibling Node -} - -func (n *BaseNode) PrevSibling() Node { - return n.prevSibling -} - -func (n *BaseNode) NextSibling() Node { - return n.nextSibling -} - -func (n *BaseNode) SetPrevSibling(node Node) { - n.prevSibling = node -} - -func (n *BaseNode) SetNextSibling(node Node) { - n.nextSibling = node -} diff --git a/proto/api/v2/markdown_service.proto b/proto/api/v2/markdown_service.proto new file mode 100644 index 00000000..1e0b20e0 --- /dev/null +++ b/proto/api/v2/markdown_service.proto @@ -0,0 +1,158 @@ +syntax = "proto3"; + +package memos.api.v2; + +import "google/api/annotations.proto"; + +option go_package = "gen/api/v2"; + +service MarkdownService { + rpc ParseMarkdown(ParseMarkdownRequest) returns (ParseMarkdownResponse) { + option (google.api.http) = { + post: "/api/v2/markdown" + body: "*" + }; + } +} + +message ParseMarkdownRequest { + string markdown = 1; +} + +message ParseMarkdownResponse { + repeated Node nodes = 1; +} + +enum NodeType { + NODE_UNSPECIFIED = 0; + LINE_BREAK = 1; + PARAGRAPH = 2; + CODE_BLOCK = 3; + HEADING = 4; + HORIZONTAL_RULE = 5; + BLOCKQUOTE = 6; + ORDERED_LIST = 7; + UNORDERED_LIST = 8; + TASK_LIST = 9; + TEXT = 10; + BOLD = 11; + ITALIC = 12; + BOLD_ITALIC = 13; + CODE = 14; + IMAGE = 15; + LINK = 16; + TAG = 17; + STRIKETHROUGH = 18; + ESCAPING_CHARACTER = 19; +} + +// Define the Node message. +message Node { + NodeType type = 1; + oneof node { + LineBreakNode line_break_node = 2; + ParagraphNode paragraph_node = 3; + CodeBlockNode code_block_node = 4; + HeadingNode heading_node = 5; + HorizontalRuleNode horizontal_rule_node = 6; + BlockquoteNode blockquote_node = 7; + OrderedListNode ordered_list_node = 8; + UnorderedListNode unordered_list_node = 9; + TaskListNode task_list_node = 10; + TextNode text_node = 11; + BoldNode bold_node = 12; + ItalicNode italic_node = 13; + BoldItalicNode bold_italic_node = 14; + CodeNode code_node = 15; + ImageNode image_node = 16; + LinkNode link_node = 17; + TagNode tag_node = 18; + StrikethroughNode strikethrough_node = 19; + EscapingCharacterNode escaping_character_node = 20; + } +} + +message LineBreakNode {} + +message ParagraphNode { + repeated Node children = 1; +} + +message CodeBlockNode { + string language = 1; + string content = 2; +} + +message HeadingNode { + int32 level = 1; + repeated Node children = 2; +} + +message HorizontalRuleNode { + string symbol = 1; +} + +message BlockquoteNode { + repeated Node children = 1; +} + +message OrderedListNode { + string number = 1; + repeated Node children = 2; +} + +message UnorderedListNode { + string symbol = 1; + repeated Node children = 2; +} + +message TaskListNode { + string symbol = 1; + bool complete = 2; + repeated Node children = 3; +} + +message TextNode { + string content = 1; +} + +message BoldNode { + string symbol = 1; + repeated Node children = 2; +} + +message ItalicNode { + string symbol = 1; + string content = 2; +} + +message BoldItalicNode { + string symbol = 1; + string content = 2; +} + +message CodeNode { + string content = 1; +} + +message ImageNode { + string alt_text = 1; + string url = 2; +} + +message LinkNode { + string text = 1; + string url = 2; +} + +message TagNode { + string content = 1; +} + +message StrikethroughNode { + string content = 1; +} + +message EscapingCharacterNode { + string symbol = 1; +} diff --git a/proto/api/v2/memo_service.proto b/proto/api/v2/memo_service.proto index 222ede74..721138c9 100644 --- a/proto/api/v2/memo_service.proto +++ b/proto/api/v2/memo_service.proto @@ -3,6 +3,7 @@ syntax = "proto3"; package memos.api.v2; import "api/v2/common.proto"; +import "api/v2/markdown_service.proto"; import "google/api/annotations.proto"; import "google/api/client.proto"; @@ -56,9 +57,11 @@ message Memo { string content = 6; - Visibility visibility = 7; + repeated Node nodes = 7; - bool pinned = 8; + Visibility visibility = 8; + + bool pinned = 9; } message CreateMemoRequest { diff --git a/proto/gen/api/v2/README.md b/proto/gen/api/v2/README.md index 7ed0442c..86bf211a 100644 --- a/proto/gen/api/v2/README.md +++ b/proto/gen/api/v2/README.md @@ -63,6 +63,34 @@ - [InboxService](#memos-api-v2-InboxService) +- [api/v2/markdown_service.proto](#api_v2_markdown_service-proto) + - [BlockquoteNode](#memos-api-v2-BlockquoteNode) + - [BoldItalicNode](#memos-api-v2-BoldItalicNode) + - [BoldNode](#memos-api-v2-BoldNode) + - [CodeBlockNode](#memos-api-v2-CodeBlockNode) + - [CodeNode](#memos-api-v2-CodeNode) + - [EscapingCharacterNode](#memos-api-v2-EscapingCharacterNode) + - [HeadingNode](#memos-api-v2-HeadingNode) + - [HorizontalRuleNode](#memos-api-v2-HorizontalRuleNode) + - [ImageNode](#memos-api-v2-ImageNode) + - [ItalicNode](#memos-api-v2-ItalicNode) + - [LineBreakNode](#memos-api-v2-LineBreakNode) + - [LinkNode](#memos-api-v2-LinkNode) + - [Node](#memos-api-v2-Node) + - [OrderedListNode](#memos-api-v2-OrderedListNode) + - [ParagraphNode](#memos-api-v2-ParagraphNode) + - [ParseMarkdownRequest](#memos-api-v2-ParseMarkdownRequest) + - [ParseMarkdownResponse](#memos-api-v2-ParseMarkdownResponse) + - [StrikethroughNode](#memos-api-v2-StrikethroughNode) + - [TagNode](#memos-api-v2-TagNode) + - [TaskListNode](#memos-api-v2-TaskListNode) + - [TextNode](#memos-api-v2-TextNode) + - [UnorderedListNode](#memos-api-v2-UnorderedListNode) + + - [NodeType](#memos-api-v2-NodeType) + + - [MarkdownService](#memos-api-v2-MarkdownService) + - [api/v2/memo_service.proto](#api_v2_memo_service-proto) - [CreateMemoCommentRequest](#memos-api-v2-CreateMemoCommentRequest) - [CreateMemoCommentResponse](#memos-api-v2-CreateMemoCommentResponse) @@ -872,6 +900,417 @@ + +

Top

+ +## api/v2/markdown_service.proto + + + + + +### BlockquoteNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| children | [Node](#memos-api-v2-Node) | repeated | | + + + + + + + + +### BoldItalicNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| symbol | [string](#string) | | | +| content | [string](#string) | | | + + + + + + + + +### BoldNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| symbol | [string](#string) | | | +| children | [Node](#memos-api-v2-Node) | repeated | | + + + + + + + + +### CodeBlockNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| language | [string](#string) | | | +| content | [string](#string) | | | + + + + + + + + +### CodeNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| content | [string](#string) | | | + + + + + + + + +### EscapingCharacterNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| symbol | [string](#string) | | | + + + + + + + + +### HeadingNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| level | [int32](#int32) | | | +| children | [Node](#memos-api-v2-Node) | repeated | | + + + + + + + + +### HorizontalRuleNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| symbol | [string](#string) | | | + + + + + + + + +### ImageNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| alt_text | [string](#string) | | | +| url | [string](#string) | | | + + + + + + + + +### ItalicNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| symbol | [string](#string) | | | +| content | [string](#string) | | | + + + + + + + + +### LineBreakNode + + + + + + + + + +### LinkNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| text | [string](#string) | | | +| url | [string](#string) | | | + + + + + + + + +### Node +Define the Node message. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| type | [NodeType](#memos-api-v2-NodeType) | | | +| line_break_node | [LineBreakNode](#memos-api-v2-LineBreakNode) | | | +| paragraph_node | [ParagraphNode](#memos-api-v2-ParagraphNode) | | | +| code_block_node | [CodeBlockNode](#memos-api-v2-CodeBlockNode) | | | +| heading_node | [HeadingNode](#memos-api-v2-HeadingNode) | | | +| horizontal_rule_node | [HorizontalRuleNode](#memos-api-v2-HorizontalRuleNode) | | | +| blockquote_node | [BlockquoteNode](#memos-api-v2-BlockquoteNode) | | | +| ordered_list_node | [OrderedListNode](#memos-api-v2-OrderedListNode) | | | +| unordered_list_node | [UnorderedListNode](#memos-api-v2-UnorderedListNode) | | | +| task_list_node | [TaskListNode](#memos-api-v2-TaskListNode) | | | +| text_node | [TextNode](#memos-api-v2-TextNode) | | | +| bold_node | [BoldNode](#memos-api-v2-BoldNode) | | | +| italic_node | [ItalicNode](#memos-api-v2-ItalicNode) | | | +| bold_italic_node | [BoldItalicNode](#memos-api-v2-BoldItalicNode) | | | +| code_node | [CodeNode](#memos-api-v2-CodeNode) | | | +| image_node | [ImageNode](#memos-api-v2-ImageNode) | | | +| link_node | [LinkNode](#memos-api-v2-LinkNode) | | | +| tag_node | [TagNode](#memos-api-v2-TagNode) | | | +| strikethrough_node | [StrikethroughNode](#memos-api-v2-StrikethroughNode) | | | +| escaping_character_node | [EscapingCharacterNode](#memos-api-v2-EscapingCharacterNode) | | | + + + + + + + + +### OrderedListNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| number | [string](#string) | | | +| children | [Node](#memos-api-v2-Node) | repeated | | + + + + + + + + +### ParagraphNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| children | [Node](#memos-api-v2-Node) | repeated | | + + + + + + + + +### ParseMarkdownRequest + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| markdown | [string](#string) | | | + + + + + + + + +### ParseMarkdownResponse + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| nodes | [Node](#memos-api-v2-Node) | repeated | | + + + + + + + + +### StrikethroughNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| content | [string](#string) | | | + + + + + + + + +### TagNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| content | [string](#string) | | | + + + + + + + + +### TaskListNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| symbol | [string](#string) | | | +| complete | [bool](#bool) | | | +| children | [Node](#memos-api-v2-Node) | repeated | | + + + + + + + + +### TextNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| content | [string](#string) | | | + + + + + + + + +### UnorderedListNode + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| symbol | [string](#string) | | | +| children | [Node](#memos-api-v2-Node) | repeated | | + + + + + + + + + + +### NodeType + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NODE_UNSPECIFIED | 0 | | +| LINE_BREAK | 1 | | +| PARAGRAPH | 2 | | +| CODE_BLOCK | 3 | | +| HEADING | 4 | | +| HORIZONTAL_RULE | 5 | | +| BLOCKQUOTE | 6 | | +| ORDERED_LIST | 7 | | +| UNORDERED_LIST | 8 | | +| TASK_LIST | 9 | | +| TEXT | 10 | | +| BOLD | 11 | | +| ITALIC | 12 | | +| BOLD_ITALIC | 13 | | +| CODE | 14 | | +| IMAGE | 15 | | +| LINK | 16 | | +| TAG | 17 | | +| STRIKETHROUGH | 18 | | +| ESCAPING_CHARACTER | 19 | | + + + + + + + + + +### MarkdownService + + +| Method Name | Request Type | Response Type | Description | +| ----------- | ------------ | ------------- | ------------| +| ParseMarkdown | [ParseMarkdownRequest](#memos-api-v2-ParseMarkdownRequest) | [ParseMarkdownResponse](#memos-api-v2-ParseMarkdownResponse) | | + + + + +

Top

@@ -1048,6 +1487,7 @@ | created_ts | [int64](#int64) | | | | updated_ts | [int64](#int64) | | | | content | [string](#string) | | | +| nodes | [Node](#memos-api-v2-Node) | repeated | | | visibility | [Visibility](#memos-api-v2-Visibility) | | | | pinned | [bool](#bool) | | | diff --git a/proto/gen/api/v2/markdown_service.pb.go b/proto/gen/api/v2/markdown_service.pb.go new file mode 100644 index 00000000..f75e10c0 --- /dev/null +++ b/proto/gen/api/v2/markdown_service.pb.go @@ -0,0 +1,2123 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc (unknown) +// source: api/v2/markdown_service.proto + +package apiv2 + +import ( + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +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) +) + +type NodeType int32 + +const ( + NodeType_NODE_UNSPECIFIED NodeType = 0 + NodeType_LINE_BREAK NodeType = 1 + NodeType_PARAGRAPH NodeType = 2 + NodeType_CODE_BLOCK NodeType = 3 + NodeType_HEADING NodeType = 4 + NodeType_HORIZONTAL_RULE NodeType = 5 + NodeType_BLOCKQUOTE NodeType = 6 + NodeType_ORDERED_LIST NodeType = 7 + NodeType_UNORDERED_LIST NodeType = 8 + NodeType_TASK_LIST NodeType = 9 + NodeType_TEXT NodeType = 10 + NodeType_BOLD NodeType = 11 + NodeType_ITALIC NodeType = 12 + NodeType_BOLD_ITALIC NodeType = 13 + NodeType_CODE NodeType = 14 + NodeType_IMAGE NodeType = 15 + NodeType_LINK NodeType = 16 + NodeType_TAG NodeType = 17 + NodeType_STRIKETHROUGH NodeType = 18 + NodeType_ESCAPING_CHARACTER NodeType = 19 +) + +// Enum value maps for NodeType. +var ( + NodeType_name = map[int32]string{ + 0: "NODE_UNSPECIFIED", + 1: "LINE_BREAK", + 2: "PARAGRAPH", + 3: "CODE_BLOCK", + 4: "HEADING", + 5: "HORIZONTAL_RULE", + 6: "BLOCKQUOTE", + 7: "ORDERED_LIST", + 8: "UNORDERED_LIST", + 9: "TASK_LIST", + 10: "TEXT", + 11: "BOLD", + 12: "ITALIC", + 13: "BOLD_ITALIC", + 14: "CODE", + 15: "IMAGE", + 16: "LINK", + 17: "TAG", + 18: "STRIKETHROUGH", + 19: "ESCAPING_CHARACTER", + } + NodeType_value = map[string]int32{ + "NODE_UNSPECIFIED": 0, + "LINE_BREAK": 1, + "PARAGRAPH": 2, + "CODE_BLOCK": 3, + "HEADING": 4, + "HORIZONTAL_RULE": 5, + "BLOCKQUOTE": 6, + "ORDERED_LIST": 7, + "UNORDERED_LIST": 8, + "TASK_LIST": 9, + "TEXT": 10, + "BOLD": 11, + "ITALIC": 12, + "BOLD_ITALIC": 13, + "CODE": 14, + "IMAGE": 15, + "LINK": 16, + "TAG": 17, + "STRIKETHROUGH": 18, + "ESCAPING_CHARACTER": 19, + } +) + +func (x NodeType) Enum() *NodeType { + p := new(NodeType) + *p = x + return p +} + +func (x NodeType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NodeType) Descriptor() protoreflect.EnumDescriptor { + return file_api_v2_markdown_service_proto_enumTypes[0].Descriptor() +} + +func (NodeType) Type() protoreflect.EnumType { + return &file_api_v2_markdown_service_proto_enumTypes[0] +} + +func (x NodeType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NodeType.Descriptor instead. +func (NodeType) EnumDescriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{0} +} + +type ParseMarkdownRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Markdown string `protobuf:"bytes,1,opt,name=markdown,proto3" json:"markdown,omitempty"` +} + +func (x *ParseMarkdownRequest) Reset() { + *x = ParseMarkdownRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ParseMarkdownRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ParseMarkdownRequest) ProtoMessage() {} + +func (x *ParseMarkdownRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ParseMarkdownRequest.ProtoReflect.Descriptor instead. +func (*ParseMarkdownRequest) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{0} +} + +func (x *ParseMarkdownRequest) GetMarkdown() string { + if x != nil { + return x.Markdown + } + return "" +} + +type ParseMarkdownResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Nodes []*Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` +} + +func (x *ParseMarkdownResponse) Reset() { + *x = ParseMarkdownResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ParseMarkdownResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ParseMarkdownResponse) ProtoMessage() {} + +func (x *ParseMarkdownResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ParseMarkdownResponse.ProtoReflect.Descriptor instead. +func (*ParseMarkdownResponse) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{1} +} + +func (x *ParseMarkdownResponse) GetNodes() []*Node { + if x != nil { + return x.Nodes + } + return nil +} + +// Define the Node message. +type Node struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type NodeType `protobuf:"varint,1,opt,name=type,proto3,enum=memos.api.v2.NodeType" json:"type,omitempty"` + // Types that are assignable to Node: + // + // *Node_LineBreakNode + // *Node_ParagraphNode + // *Node_CodeBlockNode + // *Node_HeadingNode + // *Node_HorizontalRuleNode + // *Node_BlockquoteNode + // *Node_OrderedListNode + // *Node_UnorderedListNode + // *Node_TaskListNode + // *Node_TextNode + // *Node_BoldNode + // *Node_ItalicNode + // *Node_BoldItalicNode + // *Node_CodeNode + // *Node_ImageNode + // *Node_LinkNode + // *Node_TagNode + // *Node_StrikethroughNode + // *Node_EscapingCharacterNode + Node isNode_Node `protobuf_oneof:"node"` +} + +func (x *Node) Reset() { + *x = Node{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Node) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Node) ProtoMessage() {} + +func (x *Node) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Node.ProtoReflect.Descriptor instead. +func (*Node) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{2} +} + +func (x *Node) GetType() NodeType { + if x != nil { + return x.Type + } + return NodeType_NODE_UNSPECIFIED +} + +func (m *Node) GetNode() isNode_Node { + if m != nil { + return m.Node + } + return nil +} + +func (x *Node) GetLineBreakNode() *LineBreakNode { + if x, ok := x.GetNode().(*Node_LineBreakNode); ok { + return x.LineBreakNode + } + return nil +} + +func (x *Node) GetParagraphNode() *ParagraphNode { + if x, ok := x.GetNode().(*Node_ParagraphNode); ok { + return x.ParagraphNode + } + return nil +} + +func (x *Node) GetCodeBlockNode() *CodeBlockNode { + if x, ok := x.GetNode().(*Node_CodeBlockNode); ok { + return x.CodeBlockNode + } + return nil +} + +func (x *Node) GetHeadingNode() *HeadingNode { + if x, ok := x.GetNode().(*Node_HeadingNode); ok { + return x.HeadingNode + } + return nil +} + +func (x *Node) GetHorizontalRuleNode() *HorizontalRuleNode { + if x, ok := x.GetNode().(*Node_HorizontalRuleNode); ok { + return x.HorizontalRuleNode + } + return nil +} + +func (x *Node) GetBlockquoteNode() *BlockquoteNode { + if x, ok := x.GetNode().(*Node_BlockquoteNode); ok { + return x.BlockquoteNode + } + return nil +} + +func (x *Node) GetOrderedListNode() *OrderedListNode { + if x, ok := x.GetNode().(*Node_OrderedListNode); ok { + return x.OrderedListNode + } + return nil +} + +func (x *Node) GetUnorderedListNode() *UnorderedListNode { + if x, ok := x.GetNode().(*Node_UnorderedListNode); ok { + return x.UnorderedListNode + } + return nil +} + +func (x *Node) GetTaskListNode() *TaskListNode { + if x, ok := x.GetNode().(*Node_TaskListNode); ok { + return x.TaskListNode + } + return nil +} + +func (x *Node) GetTextNode() *TextNode { + if x, ok := x.GetNode().(*Node_TextNode); ok { + return x.TextNode + } + return nil +} + +func (x *Node) GetBoldNode() *BoldNode { + if x, ok := x.GetNode().(*Node_BoldNode); ok { + return x.BoldNode + } + return nil +} + +func (x *Node) GetItalicNode() *ItalicNode { + if x, ok := x.GetNode().(*Node_ItalicNode); ok { + return x.ItalicNode + } + return nil +} + +func (x *Node) GetBoldItalicNode() *BoldItalicNode { + if x, ok := x.GetNode().(*Node_BoldItalicNode); ok { + return x.BoldItalicNode + } + return nil +} + +func (x *Node) GetCodeNode() *CodeNode { + if x, ok := x.GetNode().(*Node_CodeNode); ok { + return x.CodeNode + } + return nil +} + +func (x *Node) GetImageNode() *ImageNode { + if x, ok := x.GetNode().(*Node_ImageNode); ok { + return x.ImageNode + } + return nil +} + +func (x *Node) GetLinkNode() *LinkNode { + if x, ok := x.GetNode().(*Node_LinkNode); ok { + return x.LinkNode + } + return nil +} + +func (x *Node) GetTagNode() *TagNode { + if x, ok := x.GetNode().(*Node_TagNode); ok { + return x.TagNode + } + return nil +} + +func (x *Node) GetStrikethroughNode() *StrikethroughNode { + if x, ok := x.GetNode().(*Node_StrikethroughNode); ok { + return x.StrikethroughNode + } + return nil +} + +func (x *Node) GetEscapingCharacterNode() *EscapingCharacterNode { + if x, ok := x.GetNode().(*Node_EscapingCharacterNode); ok { + return x.EscapingCharacterNode + } + return nil +} + +type isNode_Node interface { + isNode_Node() +} + +type Node_LineBreakNode struct { + LineBreakNode *LineBreakNode `protobuf:"bytes,2,opt,name=line_break_node,json=lineBreakNode,proto3,oneof"` +} + +type Node_ParagraphNode struct { + ParagraphNode *ParagraphNode `protobuf:"bytes,3,opt,name=paragraph_node,json=paragraphNode,proto3,oneof"` +} + +type Node_CodeBlockNode struct { + CodeBlockNode *CodeBlockNode `protobuf:"bytes,4,opt,name=code_block_node,json=codeBlockNode,proto3,oneof"` +} + +type Node_HeadingNode struct { + HeadingNode *HeadingNode `protobuf:"bytes,5,opt,name=heading_node,json=headingNode,proto3,oneof"` +} + +type Node_HorizontalRuleNode struct { + HorizontalRuleNode *HorizontalRuleNode `protobuf:"bytes,6,opt,name=horizontal_rule_node,json=horizontalRuleNode,proto3,oneof"` +} + +type Node_BlockquoteNode struct { + BlockquoteNode *BlockquoteNode `protobuf:"bytes,7,opt,name=blockquote_node,json=blockquoteNode,proto3,oneof"` +} + +type Node_OrderedListNode struct { + OrderedListNode *OrderedListNode `protobuf:"bytes,8,opt,name=ordered_list_node,json=orderedListNode,proto3,oneof"` +} + +type Node_UnorderedListNode struct { + UnorderedListNode *UnorderedListNode `protobuf:"bytes,9,opt,name=unordered_list_node,json=unorderedListNode,proto3,oneof"` +} + +type Node_TaskListNode struct { + TaskListNode *TaskListNode `protobuf:"bytes,10,opt,name=task_list_node,json=taskListNode,proto3,oneof"` +} + +type Node_TextNode struct { + TextNode *TextNode `protobuf:"bytes,11,opt,name=text_node,json=textNode,proto3,oneof"` +} + +type Node_BoldNode struct { + BoldNode *BoldNode `protobuf:"bytes,12,opt,name=bold_node,json=boldNode,proto3,oneof"` +} + +type Node_ItalicNode struct { + ItalicNode *ItalicNode `protobuf:"bytes,13,opt,name=italic_node,json=italicNode,proto3,oneof"` +} + +type Node_BoldItalicNode struct { + BoldItalicNode *BoldItalicNode `protobuf:"bytes,14,opt,name=bold_italic_node,json=boldItalicNode,proto3,oneof"` +} + +type Node_CodeNode struct { + CodeNode *CodeNode `protobuf:"bytes,15,opt,name=code_node,json=codeNode,proto3,oneof"` +} + +type Node_ImageNode struct { + ImageNode *ImageNode `protobuf:"bytes,16,opt,name=image_node,json=imageNode,proto3,oneof"` +} + +type Node_LinkNode struct { + LinkNode *LinkNode `protobuf:"bytes,17,opt,name=link_node,json=linkNode,proto3,oneof"` +} + +type Node_TagNode struct { + TagNode *TagNode `protobuf:"bytes,18,opt,name=tag_node,json=tagNode,proto3,oneof"` +} + +type Node_StrikethroughNode struct { + StrikethroughNode *StrikethroughNode `protobuf:"bytes,19,opt,name=strikethrough_node,json=strikethroughNode,proto3,oneof"` +} + +type Node_EscapingCharacterNode struct { + EscapingCharacterNode *EscapingCharacterNode `protobuf:"bytes,20,opt,name=escaping_character_node,json=escapingCharacterNode,proto3,oneof"` +} + +func (*Node_LineBreakNode) isNode_Node() {} + +func (*Node_ParagraphNode) isNode_Node() {} + +func (*Node_CodeBlockNode) isNode_Node() {} + +func (*Node_HeadingNode) isNode_Node() {} + +func (*Node_HorizontalRuleNode) isNode_Node() {} + +func (*Node_BlockquoteNode) isNode_Node() {} + +func (*Node_OrderedListNode) isNode_Node() {} + +func (*Node_UnorderedListNode) isNode_Node() {} + +func (*Node_TaskListNode) isNode_Node() {} + +func (*Node_TextNode) isNode_Node() {} + +func (*Node_BoldNode) isNode_Node() {} + +func (*Node_ItalicNode) isNode_Node() {} + +func (*Node_BoldItalicNode) isNode_Node() {} + +func (*Node_CodeNode) isNode_Node() {} + +func (*Node_ImageNode) isNode_Node() {} + +func (*Node_LinkNode) isNode_Node() {} + +func (*Node_TagNode) isNode_Node() {} + +func (*Node_StrikethroughNode) isNode_Node() {} + +func (*Node_EscapingCharacterNode) isNode_Node() {} + +type LineBreakNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *LineBreakNode) Reset() { + *x = LineBreakNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LineBreakNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LineBreakNode) ProtoMessage() {} + +func (x *LineBreakNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LineBreakNode.ProtoReflect.Descriptor instead. +func (*LineBreakNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{3} +} + +type ParagraphNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Children []*Node `protobuf:"bytes,1,rep,name=children,proto3" json:"children,omitempty"` +} + +func (x *ParagraphNode) Reset() { + *x = ParagraphNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ParagraphNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ParagraphNode) ProtoMessage() {} + +func (x *ParagraphNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ParagraphNode.ProtoReflect.Descriptor instead. +func (*ParagraphNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{4} +} + +func (x *ParagraphNode) GetChildren() []*Node { + if x != nil { + return x.Children + } + return nil +} + +type CodeBlockNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Language string `protobuf:"bytes,1,opt,name=language,proto3" json:"language,omitempty"` + Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *CodeBlockNode) Reset() { + *x = CodeBlockNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CodeBlockNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CodeBlockNode) ProtoMessage() {} + +func (x *CodeBlockNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CodeBlockNode.ProtoReflect.Descriptor instead. +func (*CodeBlockNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{5} +} + +func (x *CodeBlockNode) GetLanguage() string { + if x != nil { + return x.Language + } + return "" +} + +func (x *CodeBlockNode) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +type HeadingNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Level int32 `protobuf:"varint,1,opt,name=level,proto3" json:"level,omitempty"` + Children []*Node `protobuf:"bytes,2,rep,name=children,proto3" json:"children,omitempty"` +} + +func (x *HeadingNode) Reset() { + *x = HeadingNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HeadingNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HeadingNode) ProtoMessage() {} + +func (x *HeadingNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HeadingNode.ProtoReflect.Descriptor instead. +func (*HeadingNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{6} +} + +func (x *HeadingNode) GetLevel() int32 { + if x != nil { + return x.Level + } + return 0 +} + +func (x *HeadingNode) GetChildren() []*Node { + if x != nil { + return x.Children + } + return nil +} + +type HorizontalRuleNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` +} + +func (x *HorizontalRuleNode) Reset() { + *x = HorizontalRuleNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HorizontalRuleNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HorizontalRuleNode) ProtoMessage() {} + +func (x *HorizontalRuleNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HorizontalRuleNode.ProtoReflect.Descriptor instead. +func (*HorizontalRuleNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{7} +} + +func (x *HorizontalRuleNode) GetSymbol() string { + if x != nil { + return x.Symbol + } + return "" +} + +type BlockquoteNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Children []*Node `protobuf:"bytes,1,rep,name=children,proto3" json:"children,omitempty"` +} + +func (x *BlockquoteNode) Reset() { + *x = BlockquoteNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BlockquoteNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlockquoteNode) ProtoMessage() {} + +func (x *BlockquoteNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BlockquoteNode.ProtoReflect.Descriptor instead. +func (*BlockquoteNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{8} +} + +func (x *BlockquoteNode) GetChildren() []*Node { + if x != nil { + return x.Children + } + return nil +} + +type OrderedListNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Number string `protobuf:"bytes,1,opt,name=number,proto3" json:"number,omitempty"` + Children []*Node `protobuf:"bytes,2,rep,name=children,proto3" json:"children,omitempty"` +} + +func (x *OrderedListNode) Reset() { + *x = OrderedListNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OrderedListNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OrderedListNode) ProtoMessage() {} + +func (x *OrderedListNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OrderedListNode.ProtoReflect.Descriptor instead. +func (*OrderedListNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{9} +} + +func (x *OrderedListNode) GetNumber() string { + if x != nil { + return x.Number + } + return "" +} + +func (x *OrderedListNode) GetChildren() []*Node { + if x != nil { + return x.Children + } + return nil +} + +type UnorderedListNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` + Children []*Node `protobuf:"bytes,2,rep,name=children,proto3" json:"children,omitempty"` +} + +func (x *UnorderedListNode) Reset() { + *x = UnorderedListNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnorderedListNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnorderedListNode) ProtoMessage() {} + +func (x *UnorderedListNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnorderedListNode.ProtoReflect.Descriptor instead. +func (*UnorderedListNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{10} +} + +func (x *UnorderedListNode) GetSymbol() string { + if x != nil { + return x.Symbol + } + return "" +} + +func (x *UnorderedListNode) GetChildren() []*Node { + if x != nil { + return x.Children + } + return nil +} + +type TaskListNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` + Complete bool `protobuf:"varint,2,opt,name=complete,proto3" json:"complete,omitempty"` + Children []*Node `protobuf:"bytes,3,rep,name=children,proto3" json:"children,omitempty"` +} + +func (x *TaskListNode) Reset() { + *x = TaskListNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TaskListNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TaskListNode) ProtoMessage() {} + +func (x *TaskListNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TaskListNode.ProtoReflect.Descriptor instead. +func (*TaskListNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{11} +} + +func (x *TaskListNode) GetSymbol() string { + if x != nil { + return x.Symbol + } + return "" +} + +func (x *TaskListNode) GetComplete() bool { + if x != nil { + return x.Complete + } + return false +} + +func (x *TaskListNode) GetChildren() []*Node { + if x != nil { + return x.Children + } + return nil +} + +type TextNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Content string `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *TextNode) Reset() { + *x = TextNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TextNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TextNode) ProtoMessage() {} + +func (x *TextNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TextNode.ProtoReflect.Descriptor instead. +func (*TextNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{12} +} + +func (x *TextNode) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +type BoldNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` + Children []*Node `protobuf:"bytes,2,rep,name=children,proto3" json:"children,omitempty"` +} + +func (x *BoldNode) Reset() { + *x = BoldNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BoldNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BoldNode) ProtoMessage() {} + +func (x *BoldNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BoldNode.ProtoReflect.Descriptor instead. +func (*BoldNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{13} +} + +func (x *BoldNode) GetSymbol() string { + if x != nil { + return x.Symbol + } + return "" +} + +func (x *BoldNode) GetChildren() []*Node { + if x != nil { + return x.Children + } + return nil +} + +type ItalicNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` + Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *ItalicNode) Reset() { + *x = ItalicNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ItalicNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ItalicNode) ProtoMessage() {} + +func (x *ItalicNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ItalicNode.ProtoReflect.Descriptor instead. +func (*ItalicNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{14} +} + +func (x *ItalicNode) GetSymbol() string { + if x != nil { + return x.Symbol + } + return "" +} + +func (x *ItalicNode) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +type BoldItalicNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` + Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *BoldItalicNode) Reset() { + *x = BoldItalicNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BoldItalicNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BoldItalicNode) ProtoMessage() {} + +func (x *BoldItalicNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BoldItalicNode.ProtoReflect.Descriptor instead. +func (*BoldItalicNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{15} +} + +func (x *BoldItalicNode) GetSymbol() string { + if x != nil { + return x.Symbol + } + return "" +} + +func (x *BoldItalicNode) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +type CodeNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Content string `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *CodeNode) Reset() { + *x = CodeNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CodeNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CodeNode) ProtoMessage() {} + +func (x *CodeNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CodeNode.ProtoReflect.Descriptor instead. +func (*CodeNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{16} +} + +func (x *CodeNode) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +type ImageNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AltText string `protobuf:"bytes,1,opt,name=alt_text,json=altText,proto3" json:"alt_text,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` +} + +func (x *ImageNode) Reset() { + *x = ImageNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImageNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageNode) ProtoMessage() {} + +func (x *ImageNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ImageNode.ProtoReflect.Descriptor instead. +func (*ImageNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{17} +} + +func (x *ImageNode) GetAltText() string { + if x != nil { + return x.AltText + } + return "" +} + +func (x *ImageNode) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +type LinkNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` +} + +func (x *LinkNode) Reset() { + *x = LinkNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LinkNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LinkNode) ProtoMessage() {} + +func (x *LinkNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LinkNode.ProtoReflect.Descriptor instead. +func (*LinkNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{18} +} + +func (x *LinkNode) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +func (x *LinkNode) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +type TagNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Content string `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *TagNode) Reset() { + *x = TagNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TagNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TagNode) ProtoMessage() {} + +func (x *TagNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TagNode.ProtoReflect.Descriptor instead. +func (*TagNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{19} +} + +func (x *TagNode) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +type StrikethroughNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Content string `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *StrikethroughNode) Reset() { + *x = StrikethroughNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StrikethroughNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StrikethroughNode) ProtoMessage() {} + +func (x *StrikethroughNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StrikethroughNode.ProtoReflect.Descriptor instead. +func (*StrikethroughNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{20} +} + +func (x *StrikethroughNode) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +type EscapingCharacterNode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` +} + +func (x *EscapingCharacterNode) Reset() { + *x = EscapingCharacterNode{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_markdown_service_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EscapingCharacterNode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EscapingCharacterNode) ProtoMessage() {} + +func (x *EscapingCharacterNode) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_markdown_service_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EscapingCharacterNode.ProtoReflect.Descriptor instead. +func (*EscapingCharacterNode) Descriptor() ([]byte, []int) { + return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{21} +} + +func (x *EscapingCharacterNode) GetSymbol() string { + if x != nil { + return x.Symbol + } + return "" +} + +var File_api_v2_markdown_service_proto protoreflect.FileDescriptor + +var file_api_v2_markdown_service_proto_rawDesc = []byte{ + 0x0a, 0x1d, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, + 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x1a, 0x1c, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x32, 0x0a, 0x14, 0x50, + 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x22, + 0x41, 0x0a, 0x15, 0x50, 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64, + 0x65, 0x73, 0x22, 0xd3, 0x0a, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, + 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x6c, 0x69, 0x6e, 0x65, 0x5f, + 0x62, 0x72, 0x65, 0x61, 0x6b, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, + 0x4c, 0x69, 0x6e, 0x65, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, + 0x0d, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x44, + 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x6e, 0x6f, 0x64, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x4e, + 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x64, + 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x6f, + 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x3e, 0x0a, 0x0c, 0x68, + 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x48, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0b, + 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x54, 0x0a, 0x14, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x6e, + 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, + 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, + 0x74, 0x61, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x12, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x4e, 0x6f, 0x64, + 0x65, 0x12, 0x47, 0x0a, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f, + 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x65, 0x6d, + 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x71, + 0x75, 0x6f, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x4b, 0x0a, 0x11, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, + 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x4c, + 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x51, 0x0a, 0x13, 0x75, 0x6e, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x4c, 0x69, 0x73, + 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x11, 0x75, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x74, 0x61, + 0x73, 0x6b, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, + 0x52, 0x0c, 0x74, 0x61, 0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, + 0x0a, 0x09, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x54, 0x65, 0x78, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x74, 0x65, 0x78, + 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x62, 0x6f, 0x6c, 0x64, 0x5f, 0x6e, 0x6f, + 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6f, 0x6c, 0x64, 0x4e, 0x6f, 0x64, 0x65, + 0x48, 0x00, 0x52, 0x08, 0x62, 0x6f, 0x6c, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x3b, 0x0a, 0x0b, + 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x69, + 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x48, 0x0a, 0x10, 0x62, 0x6f, 0x6c, + 0x64, 0x5f, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x32, 0x2e, 0x42, 0x6f, 0x6c, 0x64, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, + 0x65, 0x48, 0x00, 0x52, 0x0e, 0x62, 0x6f, 0x6c, 0x64, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, + 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, + 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6e, 0x6f, 0x64, + 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x48, + 0x00, 0x52, 0x08, 0x6c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x74, + 0x61, 0x67, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x67, + 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x07, 0x74, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x12, + 0x50, 0x0a, 0x12, 0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, + 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x65, + 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6b, + 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x11, + 0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x4e, 0x6f, 0x64, + 0x65, 0x12, 0x5d, 0x0a, 0x17, 0x65, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, + 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x14, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x32, 0x2e, 0x45, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, + 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x15, 0x65, 0x73, 0x63, 0x61, 0x70, + 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, + 0x42, 0x06, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x4c, 0x69, 0x6e, 0x65, + 0x42, 0x72, 0x65, 0x61, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x3f, 0x0a, 0x0d, 0x50, 0x61, 0x72, + 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, + 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, + 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, + 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x45, 0x0a, 0x0d, 0x43, 0x6f, + 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, + 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, + 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x22, 0x53, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, + 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, + 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x2c, 0x0a, 0x12, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, + 0x6e, 0x74, 0x61, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, + 0x6d, 0x62, 0x6f, 0x6c, 0x22, 0x40, 0x0a, 0x0e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x71, 0x75, 0x6f, + 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, + 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, + 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x59, 0x0a, 0x0f, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x65, + 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, + 0x6e, 0x22, 0x5b, 0x0a, 0x11, 0x55, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x4c, 0x69, + 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x2e, + 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, + 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x72, + 0x0a, 0x0c, 0x54, 0x61, 0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, + 0x65, 0x6e, 0x22, 0x24, 0x0a, 0x08, 0x54, 0x65, 0x78, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x52, 0x0a, 0x08, 0x42, 0x6f, 0x6c, 0x64, + 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x2e, 0x0a, 0x08, + 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, + 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x3e, 0x0a, 0x0a, + 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, + 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, + 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x42, 0x0a, 0x0e, + 0x42, 0x6f, 0x6c, 0x64, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x22, 0x24, 0x0a, 0x08, 0x43, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x38, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4e, + 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, + 0x22, 0x30, 0x0a, 0x08, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, + 0x72, 0x6c, 0x22, 0x23, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2d, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x69, 0x6b, + 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2f, 0x0a, 0x15, 0x45, 0x73, 0x63, 0x61, 0x70, 0x69, + 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2a, 0xba, 0x02, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, + 0x4e, 0x45, 0x5f, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x41, + 0x52, 0x41, 0x47, 0x52, 0x41, 0x50, 0x48, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x44, + 0x45, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, + 0x44, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, + 0x4e, 0x54, 0x41, 0x4c, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x42, + 0x4c, 0x4f, 0x43, 0x4b, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x4f, + 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x07, 0x12, 0x12, 0x0a, + 0x0e, 0x55, 0x4e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, + 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x41, 0x53, 0x4b, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x09, + 0x12, 0x08, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x0a, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, + 0x4c, 0x44, 0x10, 0x0b, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x54, 0x41, 0x4c, 0x49, 0x43, 0x10, 0x0c, + 0x12, 0x0f, 0x0a, 0x0b, 0x42, 0x4f, 0x4c, 0x44, 0x5f, 0x49, 0x54, 0x41, 0x4c, 0x49, 0x43, 0x10, + 0x0d, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x0e, 0x12, 0x09, 0x0a, 0x05, 0x49, + 0x4d, 0x41, 0x47, 0x45, 0x10, 0x0f, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x10, + 0x12, 0x07, 0x0a, 0x03, 0x54, 0x41, 0x47, 0x10, 0x11, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x52, + 0x49, 0x4b, 0x45, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10, 0x12, 0x12, 0x16, 0x0a, 0x12, + 0x45, 0x53, 0x43, 0x41, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, + 0x45, 0x52, 0x10, 0x13, 0x32, 0x88, 0x01, 0x0a, 0x0f, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, + 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x73, + 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x22, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, + 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, + 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, + 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x72, + 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x42, + 0xac, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x32, 0x42, 0x14, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65, 0x6d, 0x6f, + 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, + 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x32, 0xa2, 0x02, + 0x03, 0x4d, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x70, 0x69, + 0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, + 0x56, 0x32, 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, + 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, + 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_api_v2_markdown_service_proto_rawDescOnce sync.Once + file_api_v2_markdown_service_proto_rawDescData = file_api_v2_markdown_service_proto_rawDesc +) + +func file_api_v2_markdown_service_proto_rawDescGZIP() []byte { + file_api_v2_markdown_service_proto_rawDescOnce.Do(func() { + file_api_v2_markdown_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_v2_markdown_service_proto_rawDescData) + }) + return file_api_v2_markdown_service_proto_rawDescData +} + +var file_api_v2_markdown_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_api_v2_markdown_service_proto_msgTypes = make([]protoimpl.MessageInfo, 22) +var file_api_v2_markdown_service_proto_goTypes = []interface{}{ + (NodeType)(0), // 0: memos.api.v2.NodeType + (*ParseMarkdownRequest)(nil), // 1: memos.api.v2.ParseMarkdownRequest + (*ParseMarkdownResponse)(nil), // 2: memos.api.v2.ParseMarkdownResponse + (*Node)(nil), // 3: memos.api.v2.Node + (*LineBreakNode)(nil), // 4: memos.api.v2.LineBreakNode + (*ParagraphNode)(nil), // 5: memos.api.v2.ParagraphNode + (*CodeBlockNode)(nil), // 6: memos.api.v2.CodeBlockNode + (*HeadingNode)(nil), // 7: memos.api.v2.HeadingNode + (*HorizontalRuleNode)(nil), // 8: memos.api.v2.HorizontalRuleNode + (*BlockquoteNode)(nil), // 9: memos.api.v2.BlockquoteNode + (*OrderedListNode)(nil), // 10: memos.api.v2.OrderedListNode + (*UnorderedListNode)(nil), // 11: memos.api.v2.UnorderedListNode + (*TaskListNode)(nil), // 12: memos.api.v2.TaskListNode + (*TextNode)(nil), // 13: memos.api.v2.TextNode + (*BoldNode)(nil), // 14: memos.api.v2.BoldNode + (*ItalicNode)(nil), // 15: memos.api.v2.ItalicNode + (*BoldItalicNode)(nil), // 16: memos.api.v2.BoldItalicNode + (*CodeNode)(nil), // 17: memos.api.v2.CodeNode + (*ImageNode)(nil), // 18: memos.api.v2.ImageNode + (*LinkNode)(nil), // 19: memos.api.v2.LinkNode + (*TagNode)(nil), // 20: memos.api.v2.TagNode + (*StrikethroughNode)(nil), // 21: memos.api.v2.StrikethroughNode + (*EscapingCharacterNode)(nil), // 22: memos.api.v2.EscapingCharacterNode +} +var file_api_v2_markdown_service_proto_depIdxs = []int32{ + 3, // 0: memos.api.v2.ParseMarkdownResponse.nodes:type_name -> memos.api.v2.Node + 0, // 1: memos.api.v2.Node.type:type_name -> memos.api.v2.NodeType + 4, // 2: memos.api.v2.Node.line_break_node:type_name -> memos.api.v2.LineBreakNode + 5, // 3: memos.api.v2.Node.paragraph_node:type_name -> memos.api.v2.ParagraphNode + 6, // 4: memos.api.v2.Node.code_block_node:type_name -> memos.api.v2.CodeBlockNode + 7, // 5: memos.api.v2.Node.heading_node:type_name -> memos.api.v2.HeadingNode + 8, // 6: memos.api.v2.Node.horizontal_rule_node:type_name -> memos.api.v2.HorizontalRuleNode + 9, // 7: memos.api.v2.Node.blockquote_node:type_name -> memos.api.v2.BlockquoteNode + 10, // 8: memos.api.v2.Node.ordered_list_node:type_name -> memos.api.v2.OrderedListNode + 11, // 9: memos.api.v2.Node.unordered_list_node:type_name -> memos.api.v2.UnorderedListNode + 12, // 10: memos.api.v2.Node.task_list_node:type_name -> memos.api.v2.TaskListNode + 13, // 11: memos.api.v2.Node.text_node:type_name -> memos.api.v2.TextNode + 14, // 12: memos.api.v2.Node.bold_node:type_name -> memos.api.v2.BoldNode + 15, // 13: memos.api.v2.Node.italic_node:type_name -> memos.api.v2.ItalicNode + 16, // 14: memos.api.v2.Node.bold_italic_node:type_name -> memos.api.v2.BoldItalicNode + 17, // 15: memos.api.v2.Node.code_node:type_name -> memos.api.v2.CodeNode + 18, // 16: memos.api.v2.Node.image_node:type_name -> memos.api.v2.ImageNode + 19, // 17: memos.api.v2.Node.link_node:type_name -> memos.api.v2.LinkNode + 20, // 18: memos.api.v2.Node.tag_node:type_name -> memos.api.v2.TagNode + 21, // 19: memos.api.v2.Node.strikethrough_node:type_name -> memos.api.v2.StrikethroughNode + 22, // 20: memos.api.v2.Node.escaping_character_node:type_name -> memos.api.v2.EscapingCharacterNode + 3, // 21: memos.api.v2.ParagraphNode.children:type_name -> memos.api.v2.Node + 3, // 22: memos.api.v2.HeadingNode.children:type_name -> memos.api.v2.Node + 3, // 23: memos.api.v2.BlockquoteNode.children:type_name -> memos.api.v2.Node + 3, // 24: memos.api.v2.OrderedListNode.children:type_name -> memos.api.v2.Node + 3, // 25: memos.api.v2.UnorderedListNode.children:type_name -> memos.api.v2.Node + 3, // 26: memos.api.v2.TaskListNode.children:type_name -> memos.api.v2.Node + 3, // 27: memos.api.v2.BoldNode.children:type_name -> memos.api.v2.Node + 1, // 28: memos.api.v2.MarkdownService.ParseMarkdown:input_type -> memos.api.v2.ParseMarkdownRequest + 2, // 29: memos.api.v2.MarkdownService.ParseMarkdown:output_type -> memos.api.v2.ParseMarkdownResponse + 29, // [29:30] is the sub-list for method output_type + 28, // [28:29] is the sub-list for method input_type + 28, // [28:28] is the sub-list for extension type_name + 28, // [28:28] is the sub-list for extension extendee + 0, // [0:28] is the sub-list for field type_name +} + +func init() { file_api_v2_markdown_service_proto_init() } +func file_api_v2_markdown_service_proto_init() { + if File_api_v2_markdown_service_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_api_v2_markdown_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ParseMarkdownRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ParseMarkdownResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Node); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LineBreakNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ParagraphNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CodeBlockNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HeadingNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HorizontalRuleNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BlockquoteNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OrderedListNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnorderedListNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TaskListNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TextNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BoldNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ItalicNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BoldItalicNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CodeNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImageNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LinkNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TagNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StrikethroughNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_markdown_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EscapingCharacterNode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_api_v2_markdown_service_proto_msgTypes[2].OneofWrappers = []interface{}{ + (*Node_LineBreakNode)(nil), + (*Node_ParagraphNode)(nil), + (*Node_CodeBlockNode)(nil), + (*Node_HeadingNode)(nil), + (*Node_HorizontalRuleNode)(nil), + (*Node_BlockquoteNode)(nil), + (*Node_OrderedListNode)(nil), + (*Node_UnorderedListNode)(nil), + (*Node_TaskListNode)(nil), + (*Node_TextNode)(nil), + (*Node_BoldNode)(nil), + (*Node_ItalicNode)(nil), + (*Node_BoldItalicNode)(nil), + (*Node_CodeNode)(nil), + (*Node_ImageNode)(nil), + (*Node_LinkNode)(nil), + (*Node_TagNode)(nil), + (*Node_StrikethroughNode)(nil), + (*Node_EscapingCharacterNode)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_api_v2_markdown_service_proto_rawDesc, + NumEnums: 1, + NumMessages: 22, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_api_v2_markdown_service_proto_goTypes, + DependencyIndexes: file_api_v2_markdown_service_proto_depIdxs, + EnumInfos: file_api_v2_markdown_service_proto_enumTypes, + MessageInfos: file_api_v2_markdown_service_proto_msgTypes, + }.Build() + File_api_v2_markdown_service_proto = out.File + file_api_v2_markdown_service_proto_rawDesc = nil + file_api_v2_markdown_service_proto_goTypes = nil + file_api_v2_markdown_service_proto_depIdxs = nil +} diff --git a/proto/gen/api/v2/markdown_service.pb.gw.go b/proto/gen/api/v2/markdown_service.pb.gw.go new file mode 100644 index 00000000..59c81c1c --- /dev/null +++ b/proto/gen/api/v2/markdown_service.pb.gw.go @@ -0,0 +1,171 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: api/v2/markdown_service.proto + +/* +Package apiv2 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package apiv2 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_MarkdownService_ParseMarkdown_0(ctx context.Context, marshaler runtime.Marshaler, client MarkdownServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ParseMarkdownRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ParseMarkdown(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_MarkdownService_ParseMarkdown_0(ctx context.Context, marshaler runtime.Marshaler, server MarkdownServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ParseMarkdownRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ParseMarkdown(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterMarkdownServiceHandlerServer registers the http handlers for service MarkdownService to "mux". +// UnaryRPC :call MarkdownServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterMarkdownServiceHandlerFromEndpoint instead. +func RegisterMarkdownServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server MarkdownServiceServer) error { + + mux.Handle("POST", pattern_MarkdownService_ParseMarkdown_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/memos.api.v2.MarkdownService/ParseMarkdown", runtime.WithHTTPPathPattern("/api/v2/markdown")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_MarkdownService_ParseMarkdown_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_MarkdownService_ParseMarkdown_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterMarkdownServiceHandlerFromEndpoint is same as RegisterMarkdownServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterMarkdownServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.DialContext(ctx, endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterMarkdownServiceHandler(ctx, mux, conn) +} + +// RegisterMarkdownServiceHandler registers the http handlers for service MarkdownService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterMarkdownServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterMarkdownServiceHandlerClient(ctx, mux, NewMarkdownServiceClient(conn)) +} + +// RegisterMarkdownServiceHandlerClient registers the http handlers for service MarkdownService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "MarkdownServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "MarkdownServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "MarkdownServiceClient" to call the correct interceptors. +func RegisterMarkdownServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client MarkdownServiceClient) error { + + mux.Handle("POST", pattern_MarkdownService_ParseMarkdown_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/memos.api.v2.MarkdownService/ParseMarkdown", runtime.WithHTTPPathPattern("/api/v2/markdown")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_MarkdownService_ParseMarkdown_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_MarkdownService_ParseMarkdown_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_MarkdownService_ParseMarkdown_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v2", "markdown"}, "")) +) + +var ( + forward_MarkdownService_ParseMarkdown_0 = runtime.ForwardResponseMessage +) diff --git a/proto/gen/api/v2/markdown_service_grpc.pb.go b/proto/gen/api/v2/markdown_service_grpc.pb.go new file mode 100644 index 00000000..5ff2bc4b --- /dev/null +++ b/proto/gen/api/v2/markdown_service_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: api/v2/markdown_service.proto + +package apiv2 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + MarkdownService_ParseMarkdown_FullMethodName = "/memos.api.v2.MarkdownService/ParseMarkdown" +) + +// MarkdownServiceClient is the client API for MarkdownService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type MarkdownServiceClient interface { + ParseMarkdown(ctx context.Context, in *ParseMarkdownRequest, opts ...grpc.CallOption) (*ParseMarkdownResponse, error) +} + +type markdownServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewMarkdownServiceClient(cc grpc.ClientConnInterface) MarkdownServiceClient { + return &markdownServiceClient{cc} +} + +func (c *markdownServiceClient) ParseMarkdown(ctx context.Context, in *ParseMarkdownRequest, opts ...grpc.CallOption) (*ParseMarkdownResponse, error) { + out := new(ParseMarkdownResponse) + err := c.cc.Invoke(ctx, MarkdownService_ParseMarkdown_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MarkdownServiceServer is the server API for MarkdownService service. +// All implementations must embed UnimplementedMarkdownServiceServer +// for forward compatibility +type MarkdownServiceServer interface { + ParseMarkdown(context.Context, *ParseMarkdownRequest) (*ParseMarkdownResponse, error) + mustEmbedUnimplementedMarkdownServiceServer() +} + +// UnimplementedMarkdownServiceServer must be embedded to have forward compatible implementations. +type UnimplementedMarkdownServiceServer struct { +} + +func (UnimplementedMarkdownServiceServer) ParseMarkdown(context.Context, *ParseMarkdownRequest) (*ParseMarkdownResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ParseMarkdown not implemented") +} +func (UnimplementedMarkdownServiceServer) mustEmbedUnimplementedMarkdownServiceServer() {} + +// UnsafeMarkdownServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to MarkdownServiceServer will +// result in compilation errors. +type UnsafeMarkdownServiceServer interface { + mustEmbedUnimplementedMarkdownServiceServer() +} + +func RegisterMarkdownServiceServer(s grpc.ServiceRegistrar, srv MarkdownServiceServer) { + s.RegisterService(&MarkdownService_ServiceDesc, srv) +} + +func _MarkdownService_ParseMarkdown_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ParseMarkdownRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MarkdownServiceServer).ParseMarkdown(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: MarkdownService_ParseMarkdown_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MarkdownServiceServer).ParseMarkdown(ctx, req.(*ParseMarkdownRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// MarkdownService_ServiceDesc is the grpc.ServiceDesc for MarkdownService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var MarkdownService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "memos.api.v2.MarkdownService", + HandlerType: (*MarkdownServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ParseMarkdown", + Handler: _MarkdownService_ParseMarkdown_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "api/v2/markdown_service.proto", +} diff --git a/proto/gen/api/v2/memo_service.pb.go b/proto/gen/api/v2/memo_service.pb.go index adc62e78..b0243c4c 100644 --- a/proto/gen/api/v2/memo_service.pb.go +++ b/proto/gen/api/v2/memo_service.pb.go @@ -84,8 +84,9 @@ type Memo struct { CreatedTs int64 `protobuf:"varint,4,opt,name=created_ts,json=createdTs,proto3" json:"created_ts,omitempty"` UpdatedTs int64 `protobuf:"varint,5,opt,name=updated_ts,json=updatedTs,proto3" json:"updated_ts,omitempty"` Content string `protobuf:"bytes,6,opt,name=content,proto3" json:"content,omitempty"` - Visibility Visibility `protobuf:"varint,7,opt,name=visibility,proto3,enum=memos.api.v2.Visibility" json:"visibility,omitempty"` - Pinned bool `protobuf:"varint,8,opt,name=pinned,proto3" json:"pinned,omitempty"` + Nodes []*Node `protobuf:"bytes,7,rep,name=nodes,proto3" json:"nodes,omitempty"` + Visibility Visibility `protobuf:"varint,8,opt,name=visibility,proto3,enum=memos.api.v2.Visibility" json:"visibility,omitempty"` + Pinned bool `protobuf:"varint,9,opt,name=pinned,proto3" json:"pinned,omitempty"` } func (x *Memo) Reset() { @@ -162,6 +163,13 @@ func (x *Memo) GetContent() string { return "" } +func (x *Memo) GetNodes() []*Node { + if x != nil { + return x.Nodes + } + return nil +} + func (x *Memo) GetVisibility() Visibility { if x != nil { return x.Visibility @@ -694,130 +702,135 @@ var file_api_v2_memo_service_proto_rawDesc = []byte{ 0x0a, 0x19, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x1a, 0x13, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x97, 0x02, 0x0a, 0x04, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, - 0x0a, 0x0a, 0x72, 0x6f, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x32, 0x2e, 0x52, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x72, 0x6f, 0x77, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x54, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x54, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, - 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x18, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, - 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x76, 0x69, 0x73, - 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65, - 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x22, - 0x67, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x38, - 0x0a, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x32, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x76, 0x69, - 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x3c, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, + 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x5f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x02, 0x0a, 0x04, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, + 0x0a, 0x72, 0x6f, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x17, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x52, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x72, 0x6f, 0x77, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x6f, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x54, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x54, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x05, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, + 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, + 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6d, 0x65, 0x6d, + 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x22, 0x67, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6d, 0x65, + 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x22, 0x3c, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, + 0x8e, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x22, 0x0a, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x48, 0x00, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x88, 0x01, + 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, + 0x22, 0x3d, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x05, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x22, + 0x20, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x39, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x63, 0x0a, 0x18, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, + 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x22, 0x43, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, - 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x8e, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4d, - 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x6f, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x22, 0x3d, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4d, - 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, - 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, - 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x52, - 0x05, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x22, 0x20, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, - 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x39, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4d, - 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x6d, - 0x65, 0x6d, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, - 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x04, 0x6d, - 0x65, 0x6d, 0x6f, 0x22, 0x63, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, - 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x37, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x22, 0x43, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x29, 0x0a, - 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, - 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x05, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2a, 0x50, - 0x0a, 0x0a, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, - 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56, - 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x4f, 0x54, 0x45, 0x43, 0x54, - 0x45, 0x44, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x03, - 0x32, 0xe2, 0x04, 0x0a, 0x0b, 0x4d, 0x65, 0x6d, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x66, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1f, - 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x20, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x32, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x12, 0x63, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, - 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x12, 0x1e, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x12, 0x67, 0x0a, - 0x07, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1c, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0xda, 0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x14, 0x12, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x2e, 0x6d, - 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, - 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0xda, - 0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x1b, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, - 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x8b, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, - 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x6d, + 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x29, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, + 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x44, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, + 0x05, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, + 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, + 0x52, 0x05, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2a, 0x50, 0x0a, 0x0a, 0x56, 0x69, 0x73, 0x69, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, + 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0d, + 0x0a, 0x09, 0x50, 0x52, 0x4f, 0x54, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0a, 0x0a, + 0x06, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x03, 0x32, 0xe2, 0x04, 0x0a, 0x0b, 0x4d, 0x65, + 0x6d, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x66, 0x0a, 0x0a, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, + 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x0f, 0x22, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, + 0x73, 0x12, 0x63, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x12, 0x1e, + 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, + 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, + 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x12, 0x67, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, + 0x6f, 0x12, 0x1c, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, + 0xda, 0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, + 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, + 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0xda, 0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1d, 0x22, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x65, 0x6d, + 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x8b, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0xda, 0x41, 0x02, - 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x32, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6d, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0xa8, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65, - 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x42, 0x10, 0x4d, 0x65, 0x6d, 0x6f, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65, - 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x32, - 0xa2, 0x02, 0x03, 0x4d, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41, - 0x70, 0x69, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, - 0x69, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, - 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x32, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0xda, 0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0xa8, + 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x32, 0x42, 0x10, 0x4d, 0x65, 0x6d, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d, + 0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x4d, 0x41, 0x58, 0xaa, + 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x32, 0xca, 0x02, + 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18, + 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x73, + 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -848,32 +861,34 @@ var file_api_v2_memo_service_proto_goTypes = []interface{}{ (*ListMemoCommentsRequest)(nil), // 10: memos.api.v2.ListMemoCommentsRequest (*ListMemoCommentsResponse)(nil), // 11: memos.api.v2.ListMemoCommentsResponse (RowStatus)(0), // 12: memos.api.v2.RowStatus + (*Node)(nil), // 13: memos.api.v2.Node } var file_api_v2_memo_service_proto_depIdxs = []int32{ 12, // 0: memos.api.v2.Memo.row_status:type_name -> memos.api.v2.RowStatus - 0, // 1: memos.api.v2.Memo.visibility:type_name -> memos.api.v2.Visibility - 0, // 2: memos.api.v2.CreateMemoRequest.visibility:type_name -> memos.api.v2.Visibility - 1, // 3: memos.api.v2.CreateMemoResponse.memo:type_name -> memos.api.v2.Memo - 1, // 4: memos.api.v2.ListMemosResponse.memos:type_name -> memos.api.v2.Memo - 1, // 5: memos.api.v2.GetMemoResponse.memo:type_name -> memos.api.v2.Memo - 2, // 6: memos.api.v2.CreateMemoCommentRequest.create:type_name -> memos.api.v2.CreateMemoRequest - 1, // 7: memos.api.v2.CreateMemoCommentResponse.memo:type_name -> memos.api.v2.Memo - 1, // 8: memos.api.v2.ListMemoCommentsResponse.memos:type_name -> memos.api.v2.Memo - 2, // 9: memos.api.v2.MemoService.CreateMemo:input_type -> memos.api.v2.CreateMemoRequest - 4, // 10: memos.api.v2.MemoService.ListMemos:input_type -> memos.api.v2.ListMemosRequest - 6, // 11: memos.api.v2.MemoService.GetMemo:input_type -> memos.api.v2.GetMemoRequest - 8, // 12: memos.api.v2.MemoService.CreateMemoComment:input_type -> memos.api.v2.CreateMemoCommentRequest - 10, // 13: memos.api.v2.MemoService.ListMemoComments:input_type -> memos.api.v2.ListMemoCommentsRequest - 3, // 14: memos.api.v2.MemoService.CreateMemo:output_type -> memos.api.v2.CreateMemoResponse - 5, // 15: memos.api.v2.MemoService.ListMemos:output_type -> memos.api.v2.ListMemosResponse - 7, // 16: memos.api.v2.MemoService.GetMemo:output_type -> memos.api.v2.GetMemoResponse - 9, // 17: memos.api.v2.MemoService.CreateMemoComment:output_type -> memos.api.v2.CreateMemoCommentResponse - 11, // 18: memos.api.v2.MemoService.ListMemoComments:output_type -> memos.api.v2.ListMemoCommentsResponse - 14, // [14:19] is the sub-list for method output_type - 9, // [9:14] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name + 13, // 1: memos.api.v2.Memo.nodes:type_name -> memos.api.v2.Node + 0, // 2: memos.api.v2.Memo.visibility:type_name -> memos.api.v2.Visibility + 0, // 3: memos.api.v2.CreateMemoRequest.visibility:type_name -> memos.api.v2.Visibility + 1, // 4: memos.api.v2.CreateMemoResponse.memo:type_name -> memos.api.v2.Memo + 1, // 5: memos.api.v2.ListMemosResponse.memos:type_name -> memos.api.v2.Memo + 1, // 6: memos.api.v2.GetMemoResponse.memo:type_name -> memos.api.v2.Memo + 2, // 7: memos.api.v2.CreateMemoCommentRequest.create:type_name -> memos.api.v2.CreateMemoRequest + 1, // 8: memos.api.v2.CreateMemoCommentResponse.memo:type_name -> memos.api.v2.Memo + 1, // 9: memos.api.v2.ListMemoCommentsResponse.memos:type_name -> memos.api.v2.Memo + 2, // 10: memos.api.v2.MemoService.CreateMemo:input_type -> memos.api.v2.CreateMemoRequest + 4, // 11: memos.api.v2.MemoService.ListMemos:input_type -> memos.api.v2.ListMemosRequest + 6, // 12: memos.api.v2.MemoService.GetMemo:input_type -> memos.api.v2.GetMemoRequest + 8, // 13: memos.api.v2.MemoService.CreateMemoComment:input_type -> memos.api.v2.CreateMemoCommentRequest + 10, // 14: memos.api.v2.MemoService.ListMemoComments:input_type -> memos.api.v2.ListMemoCommentsRequest + 3, // 15: memos.api.v2.MemoService.CreateMemo:output_type -> memos.api.v2.CreateMemoResponse + 5, // 16: memos.api.v2.MemoService.ListMemos:output_type -> memos.api.v2.ListMemosResponse + 7, // 17: memos.api.v2.MemoService.GetMemo:output_type -> memos.api.v2.GetMemoResponse + 9, // 18: memos.api.v2.MemoService.CreateMemoComment:output_type -> memos.api.v2.CreateMemoCommentResponse + 11, // 19: memos.api.v2.MemoService.ListMemoComments:output_type -> memos.api.v2.ListMemoCommentsResponse + 15, // [15:20] is the sub-list for method output_type + 10, // [10:15] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name } func init() { file_api_v2_memo_service_proto_init() } @@ -882,6 +897,7 @@ func file_api_v2_memo_service_proto_init() { return } file_api_v2_common_proto_init() + file_api_v2_markdown_service_proto_init() if !protoimpl.UnsafeEnabled { file_api_v2_memo_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Memo); i {