mirror of
https://github.com/usememos/memos.git
synced 2024-12-18 00:21:48 +03:00
feat: add markdown service
This commit is contained in:
parent
bb42042db4
commit
28c0549705
90
api/v2/markdown_service.go
Normal file
90
api/v2/markdown_service.go
Normal file
@ -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
|
||||||
|
}
|
30
api/v2/markdown_service_test.go
Normal file
30
api/v2/markdown_service_test.go
Normal file
@ -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)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -5,7 +5,7 @@ import (
|
|||||||
|
|
||||||
"github.com/google/cel-go/cel"
|
"github.com/google/cel-go/cel"
|
||||||
"github.com/pkg/errors"
|
"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/codes"
|
||||||
"google.golang.org/grpc/status"
|
"google.golang.org/grpc/status"
|
||||||
|
|
||||||
@ -32,8 +32,12 @@ func (s *APIV2Service) CreateMemo(ctx context.Context, request *apiv2pb.CreateMe
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memoMessage, err := convertMemoFromStore(memo)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "failed to convert memo")
|
||||||
|
}
|
||||||
response := &apiv2pb.CreateMemoResponse{
|
response := &apiv2pb.CreateMemoResponse{
|
||||||
Memo: convertMemoFromStore(memo),
|
Memo: memoMessage,
|
||||||
}
|
}
|
||||||
return response, nil
|
return response, nil
|
||||||
}
|
}
|
||||||
@ -89,7 +93,11 @@ func (s *APIV2Service) ListMemos(ctx context.Context, request *apiv2pb.ListMemos
|
|||||||
|
|
||||||
memoMessages := make([]*apiv2pb.Memo, len(memos))
|
memoMessages := make([]*apiv2pb.Memo, len(memos))
|
||||||
for i, memo := range 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{
|
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{
|
response := &apiv2pb.GetMemoResponse{
|
||||||
Memo: convertMemoFromStore(memo),
|
Memo: memoMessage,
|
||||||
}
|
}
|
||||||
return response, nil
|
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")
|
return nil, status.Errorf(codes.Internal, "failed to get memo")
|
||||||
}
|
}
|
||||||
if memo != nil {
|
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
|
return filter, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func findField(callExpr *v1alpha1.Expr_Call, filter *ListMemosFilter) {
|
func findField(callExpr *expr.Expr_Call, filter *ListMemosFilter) {
|
||||||
if len(callExpr.Args) == 2 {
|
if len(callExpr.Args) == 2 {
|
||||||
idExpr := callExpr.Args[0].GetIdentExpr()
|
idExpr := callExpr.Args[0].GetIdentExpr()
|
||||||
if idExpr != nil {
|
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{
|
return &apiv2pb.Memo{
|
||||||
Id: int32(memo.ID),
|
Id: int32(memo.ID),
|
||||||
RowStatus: convertRowStatusFromStore(memo.RowStatus),
|
RowStatus: convertRowStatusFromStore(memo.RowStatus),
|
||||||
@ -249,7 +265,7 @@ func convertMemoFromStore(memo *store.Memo) *apiv2pb.Memo {
|
|||||||
Content: memo.Content,
|
Content: memo.Content,
|
||||||
Visibility: convertVisibilityFromStore(memo.Visibility),
|
Visibility: convertVisibilityFromStore(memo.Visibility),
|
||||||
Pinned: memo.Pinned,
|
Pinned: memo.Pinned,
|
||||||
}
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func convertVisibilityFromStore(visibility store.Visibility) apiv2pb.Visibility {
|
func convertVisibilityFromStore(visibility store.Visibility) apiv2pb.Visibility {
|
||||||
|
@ -26,6 +26,7 @@ type APIV2Service struct {
|
|||||||
apiv2pb.UnimplementedInboxServiceServer
|
apiv2pb.UnimplementedInboxServiceServer
|
||||||
apiv2pb.UnimplementedActivityServiceServer
|
apiv2pb.UnimplementedActivityServiceServer
|
||||||
apiv2pb.UnimplementedWebhookServiceServer
|
apiv2pb.UnimplementedWebhookServiceServer
|
||||||
|
apiv2pb.UnimplementedMarkdownServiceServer
|
||||||
|
|
||||||
Secret string
|
Secret string
|
||||||
Profile *profile.Profile
|
Profile *profile.Profile
|
||||||
@ -60,6 +61,7 @@ func NewAPIV2Service(secret string, profile *profile.Profile, store *store.Store
|
|||||||
apiv2pb.RegisterInboxServiceServer(grpcServer, apiv2Service)
|
apiv2pb.RegisterInboxServiceServer(grpcServer, apiv2Service)
|
||||||
apiv2pb.RegisterActivityServiceServer(grpcServer, apiv2Service)
|
apiv2pb.RegisterActivityServiceServer(grpcServer, apiv2Service)
|
||||||
apiv2pb.RegisterWebhookServiceServer(grpcServer, apiv2Service)
|
apiv2pb.RegisterWebhookServiceServer(grpcServer, apiv2Service)
|
||||||
|
apiv2pb.RegisterMarkdownServiceServer(grpcServer, apiv2Service)
|
||||||
reflection.Register(grpcServer)
|
reflection.Register(grpcServer)
|
||||||
|
|
||||||
return apiv2Service
|
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 {
|
if err := apiv2pb.RegisterWebhookServiceHandler(context.Background(), gwMux, conn); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := apiv2pb.RegisterMarkdownServiceHandler(context.Background(), gwMux, conn); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
e.Any("/api/v2/*", echo.WrapHandler(gwMux))
|
e.Any("/api/v2/*", echo.WrapHandler(gwMux))
|
||||||
|
|
||||||
// GRPC web proxy.
|
// GRPC web proxy.
|
||||||
|
@ -1 +1,112 @@
|
|||||||
package ast
|
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
|
||||||
|
}
|
||||||
|
@ -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
|
|
||||||
}
|
|
158
proto/api/v2/markdown_service.proto
Normal file
158
proto/api/v2/markdown_service.proto
Normal file
@ -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;
|
||||||
|
}
|
@ -3,6 +3,7 @@ syntax = "proto3";
|
|||||||
package memos.api.v2;
|
package memos.api.v2;
|
||||||
|
|
||||||
import "api/v2/common.proto";
|
import "api/v2/common.proto";
|
||||||
|
import "api/v2/markdown_service.proto";
|
||||||
import "google/api/annotations.proto";
|
import "google/api/annotations.proto";
|
||||||
import "google/api/client.proto";
|
import "google/api/client.proto";
|
||||||
|
|
||||||
@ -56,9 +57,11 @@ message Memo {
|
|||||||
|
|
||||||
string content = 6;
|
string content = 6;
|
||||||
|
|
||||||
Visibility visibility = 7;
|
repeated Node nodes = 7;
|
||||||
|
|
||||||
bool pinned = 8;
|
Visibility visibility = 8;
|
||||||
|
|
||||||
|
bool pinned = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
message CreateMemoRequest {
|
message CreateMemoRequest {
|
||||||
|
@ -63,6 +63,34 @@
|
|||||||
|
|
||||||
- [InboxService](#memos-api-v2-InboxService)
|
- [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)
|
- [api/v2/memo_service.proto](#api_v2_memo_service-proto)
|
||||||
- [CreateMemoCommentRequest](#memos-api-v2-CreateMemoCommentRequest)
|
- [CreateMemoCommentRequest](#memos-api-v2-CreateMemoCommentRequest)
|
||||||
- [CreateMemoCommentResponse](#memos-api-v2-CreateMemoCommentResponse)
|
- [CreateMemoCommentResponse](#memos-api-v2-CreateMemoCommentResponse)
|
||||||
@ -872,6 +900,417 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="api_v2_markdown_service-proto"></a>
|
||||||
|
<p align="right"><a href="#top">Top</a></p>
|
||||||
|
|
||||||
|
## api/v2/markdown_service.proto
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-BlockquoteNode"></a>
|
||||||
|
|
||||||
|
### BlockquoteNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| children | [Node](#memos-api-v2-Node) | repeated | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-BoldItalicNode"></a>
|
||||||
|
|
||||||
|
### BoldItalicNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| symbol | [string](#string) | | |
|
||||||
|
| content | [string](#string) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-BoldNode"></a>
|
||||||
|
|
||||||
|
### BoldNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| symbol | [string](#string) | | |
|
||||||
|
| children | [Node](#memos-api-v2-Node) | repeated | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-CodeBlockNode"></a>
|
||||||
|
|
||||||
|
### CodeBlockNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| language | [string](#string) | | |
|
||||||
|
| content | [string](#string) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-CodeNode"></a>
|
||||||
|
|
||||||
|
### CodeNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| content | [string](#string) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-EscapingCharacterNode"></a>
|
||||||
|
|
||||||
|
### EscapingCharacterNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| symbol | [string](#string) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-HeadingNode"></a>
|
||||||
|
|
||||||
|
### HeadingNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| level | [int32](#int32) | | |
|
||||||
|
| children | [Node](#memos-api-v2-Node) | repeated | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-HorizontalRuleNode"></a>
|
||||||
|
|
||||||
|
### HorizontalRuleNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| symbol | [string](#string) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-ImageNode"></a>
|
||||||
|
|
||||||
|
### ImageNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| alt_text | [string](#string) | | |
|
||||||
|
| url | [string](#string) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-ItalicNode"></a>
|
||||||
|
|
||||||
|
### ItalicNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| symbol | [string](#string) | | |
|
||||||
|
| content | [string](#string) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-LineBreakNode"></a>
|
||||||
|
|
||||||
|
### LineBreakNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-LinkNode"></a>
|
||||||
|
|
||||||
|
### LinkNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| text | [string](#string) | | |
|
||||||
|
| url | [string](#string) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-Node"></a>
|
||||||
|
|
||||||
|
### 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) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-OrderedListNode"></a>
|
||||||
|
|
||||||
|
### OrderedListNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| number | [string](#string) | | |
|
||||||
|
| children | [Node](#memos-api-v2-Node) | repeated | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-ParagraphNode"></a>
|
||||||
|
|
||||||
|
### ParagraphNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| children | [Node](#memos-api-v2-Node) | repeated | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-ParseMarkdownRequest"></a>
|
||||||
|
|
||||||
|
### ParseMarkdownRequest
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| markdown | [string](#string) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-ParseMarkdownResponse"></a>
|
||||||
|
|
||||||
|
### ParseMarkdownResponse
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| nodes | [Node](#memos-api-v2-Node) | repeated | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-StrikethroughNode"></a>
|
||||||
|
|
||||||
|
### StrikethroughNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| content | [string](#string) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-TagNode"></a>
|
||||||
|
|
||||||
|
### TagNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| content | [string](#string) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-TaskListNode"></a>
|
||||||
|
|
||||||
|
### TaskListNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| symbol | [string](#string) | | |
|
||||||
|
| complete | [bool](#bool) | | |
|
||||||
|
| children | [Node](#memos-api-v2-Node) | repeated | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-TextNode"></a>
|
||||||
|
|
||||||
|
### TextNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| content | [string](#string) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-UnorderedListNode"></a>
|
||||||
|
|
||||||
|
### UnorderedListNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| symbol | [string](#string) | | |
|
||||||
|
| children | [Node](#memos-api-v2-Node) | repeated | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-NodeType"></a>
|
||||||
|
|
||||||
|
### 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 | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="memos-api-v2-MarkdownService"></a>
|
||||||
|
|
||||||
|
### MarkdownService
|
||||||
|
|
||||||
|
|
||||||
|
| Method Name | Request Type | Response Type | Description |
|
||||||
|
| ----------- | ------------ | ------------- | ------------|
|
||||||
|
| ParseMarkdown | [ParseMarkdownRequest](#memos-api-v2-ParseMarkdownRequest) | [ParseMarkdownResponse](#memos-api-v2-ParseMarkdownResponse) | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="api_v2_memo_service-proto"></a>
|
<a name="api_v2_memo_service-proto"></a>
|
||||||
<p align="right"><a href="#top">Top</a></p>
|
<p align="right"><a href="#top">Top</a></p>
|
||||||
|
|
||||||
@ -1048,6 +1487,7 @@
|
|||||||
| created_ts | [int64](#int64) | | |
|
| created_ts | [int64](#int64) | | |
|
||||||
| updated_ts | [int64](#int64) | | |
|
| updated_ts | [int64](#int64) | | |
|
||||||
| content | [string](#string) | | |
|
| content | [string](#string) | | |
|
||||||
|
| nodes | [Node](#memos-api-v2-Node) | repeated | |
|
||||||
| visibility | [Visibility](#memos-api-v2-Visibility) | | |
|
| visibility | [Visibility](#memos-api-v2-Visibility) | | |
|
||||||
| pinned | [bool](#bool) | | |
|
| pinned | [bool](#bool) | | |
|
||||||
|
|
||||||
|
2123
proto/gen/api/v2/markdown_service.pb.go
Normal file
2123
proto/gen/api/v2/markdown_service.pb.go
Normal file
File diff suppressed because it is too large
Load Diff
171
proto/gen/api/v2/markdown_service.pb.gw.go
Normal file
171
proto/gen/api/v2/markdown_service.pb.gw.go
Normal file
@ -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
|
||||||
|
)
|
109
proto/gen/api/v2/markdown_service_grpc.pb.go
Normal file
109
proto/gen/api/v2/markdown_service_grpc.pb.go
Normal file
@ -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",
|
||||||
|
}
|
@ -84,8 +84,9 @@ type Memo struct {
|
|||||||
CreatedTs int64 `protobuf:"varint,4,opt,name=created_ts,json=createdTs,proto3" json:"created_ts,omitempty"`
|
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"`
|
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"`
|
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"`
|
Nodes []*Node `protobuf:"bytes,7,rep,name=nodes,proto3" json:"nodes,omitempty"`
|
||||||
Pinned bool `protobuf:"varint,8,opt,name=pinned,proto3" json:"pinned,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() {
|
func (x *Memo) Reset() {
|
||||||
@ -162,6 +163,13 @@ func (x *Memo) GetContent() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *Memo) GetNodes() []*Node {
|
||||||
|
if x != nil {
|
||||||
|
return x.Nodes
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (x *Memo) GetVisibility() Visibility {
|
func (x *Memo) GetVisibility() Visibility {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.Visibility
|
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,
|
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,
|
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,
|
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,
|
0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d,
|
||||||
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74,
|
0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x5f,
|
||||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f,
|
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67,
|
||||||
0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e,
|
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61,
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x97, 0x02, 0x0a, 0x04, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x0e,
|
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f,
|
||||||
0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36,
|
0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70,
|
||||||
0x0a, 0x0a, 0x72, 0x6f, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01,
|
0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x02, 0x0a, 0x04, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x0e, 0x0a,
|
||||||
0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76,
|
0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a,
|
||||||
0x32, 0x2e, 0x52, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x72, 0x6f, 0x77,
|
0x0a, 0x72, 0x6f, 0x77, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||||
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f,
|
0x0e, 0x32, 0x17, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32,
|
||||||
0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61,
|
0x2e, 0x52, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x72, 0x6f, 0x77, 0x53,
|
||||||
0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
|
0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72,
|
||||||
0x5f, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74,
|
0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74,
|
||||||
0x65, 0x64, 0x54, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f,
|
0x6f, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f,
|
||||||
0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
|
0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
|
||||||
0x64, 0x54, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x06,
|
0x64, 0x54, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a,
|
0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
|
||||||
0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28,
|
0x54, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20,
|
||||||
0x0e, 0x32, 0x18, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32,
|
0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x05,
|
||||||
0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x76, 0x69, 0x73,
|
0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65,
|
||||||
0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65,
|
0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52,
|
||||||
0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x22,
|
0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69,
|
||||||
0x67, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71,
|
0x6c, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6d, 0x65, 0x6d,
|
||||||
0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18,
|
0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69,
|
||||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x38,
|
0x6c, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
|
||||||
0x0a, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01,
|
0x12, 0x16, 0x0a, 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08,
|
||||||
0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76,
|
0x52, 0x06, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x22, 0x67, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61,
|
||||||
0x32, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x76, 0x69,
|
0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a,
|
||||||
0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x3c, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61,
|
0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
|
||||||
0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26,
|
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,
|
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,
|
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,
|
0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x29, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65,
|
||||||
0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70,
|
0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||||
0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12,
|
0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69,
|
||||||
0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01,
|
0x64, 0x22, 0x44, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d,
|
||||||
0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06,
|
0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a,
|
||||||
0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69,
|
0x05, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d,
|
||||||
0x6c, 0x74, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x5f,
|
0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f,
|
||||||
0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61,
|
0x52, 0x05, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2a, 0x50, 0x0a, 0x0a, 0x56, 0x69, 0x73, 0x69, 0x62,
|
||||||
0x74, 0x6f, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x72, 0x65,
|
0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c,
|
||||||
0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x22, 0x3d, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4d,
|
0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10,
|
||||||
0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05,
|
0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0d,
|
||||||
0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65,
|
0x0a, 0x09, 0x50, 0x52, 0x4f, 0x54, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0a, 0x0a,
|
||||||
0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x52,
|
0x06, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x03, 0x32, 0xe2, 0x04, 0x0a, 0x0b, 0x4d, 0x65,
|
||||||
0x05, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x22, 0x20, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d,
|
0x6d, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x66, 0x0a, 0x0a, 0x43, 0x72, 0x65,
|
||||||
0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
|
0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e,
|
||||||
0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x39, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4d,
|
0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d,
|
||||||
0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x6d,
|
0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73,
|
||||||
0x65, 0x6d, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f,
|
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65,
|
||||||
0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x04, 0x6d,
|
0x6d, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93,
|
||||||
0x65, 0x6d, 0x6f, 0x22, 0x63, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d,
|
0x02, 0x0f, 0x22, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x65, 0x6d, 0x6f,
|
||||||
0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
|
0x73, 0x12, 0x63, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x12, 0x1e,
|
||||||
0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12,
|
0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69,
|
||||||
0x37, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f,
|
||||||
0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43,
|
0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69,
|
||||||
0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
|
||||||
0x52, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x22, 0x43, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61,
|
0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32,
|
||||||
0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73,
|
0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x12, 0x67, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d,
|
||||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x01, 0x20,
|
0x6f, 0x12, 0x1c, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32,
|
||||||
0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||||
0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x29, 0x0a,
|
0x1d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x47,
|
||||||
0x17, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74,
|
0x65, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f,
|
||||||
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
|
0xda, 0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x61, 0x70,
|
||||||
0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74,
|
0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12,
|
||||||
0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70,
|
0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f,
|
||||||
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x18, 0x01, 0x20,
|
0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70,
|
||||||
0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43,
|
||||||
0x76, 0x32, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x05, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2a, 0x50,
|
0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e,
|
||||||
0x0a, 0x0a, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x16,
|
0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65,
|
||||||
0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
|
0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65,
|
||||||
0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56,
|
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0xda, 0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4,
|
||||||
0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x4f, 0x54, 0x45, 0x43, 0x54,
|
0x93, 0x02, 0x1d, 0x22, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x65, 0x6d,
|
||||||
0x45, 0x44, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x03,
|
0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73,
|
||||||
0x32, 0xe2, 0x04, 0x0a, 0x0b, 0x4d, 0x65, 0x6d, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
0x12, 0x8b, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d,
|
||||||
0x12, 0x66, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x12, 0x1f,
|
0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70,
|
||||||
0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72,
|
0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d,
|
||||||
0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d,
|
||||||
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,
|
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,
|
0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70,
|
||||||
0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0xda, 0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02,
|
||||||
0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65,
|
0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73,
|
||||||
0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0xda, 0x41, 0x02,
|
0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0xa8,
|
||||||
0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76,
|
0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69,
|
||||||
0x32, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6d,
|
0x2e, 0x76, 0x32, 0x42, 0x10, 0x4d, 0x65, 0x6d, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||||
0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0xa8, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65,
|
0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
|
||||||
0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x42, 0x10, 0x4d, 0x65, 0x6d, 0x6f,
|
0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d,
|
||||||
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30,
|
0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69,
|
||||||
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65,
|
0x2f, 0x76, 0x32, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x4d, 0x41, 0x58, 0xaa,
|
||||||
0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
|
0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x32, 0xca, 0x02,
|
||||||
0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x32,
|
0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18,
|
||||||
0xa2, 0x02, 0x03, 0x4d, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41,
|
0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42,
|
||||||
0x70, 0x69, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70,
|
0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x73,
|
||||||
0x69, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69,
|
0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea,
|
0x33,
|
||||||
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 (
|
var (
|
||||||
@ -848,32 +861,34 @@ var file_api_v2_memo_service_proto_goTypes = []interface{}{
|
|||||||
(*ListMemoCommentsRequest)(nil), // 10: memos.api.v2.ListMemoCommentsRequest
|
(*ListMemoCommentsRequest)(nil), // 10: memos.api.v2.ListMemoCommentsRequest
|
||||||
(*ListMemoCommentsResponse)(nil), // 11: memos.api.v2.ListMemoCommentsResponse
|
(*ListMemoCommentsResponse)(nil), // 11: memos.api.v2.ListMemoCommentsResponse
|
||||||
(RowStatus)(0), // 12: memos.api.v2.RowStatus
|
(RowStatus)(0), // 12: memos.api.v2.RowStatus
|
||||||
|
(*Node)(nil), // 13: memos.api.v2.Node
|
||||||
}
|
}
|
||||||
var file_api_v2_memo_service_proto_depIdxs = []int32{
|
var file_api_v2_memo_service_proto_depIdxs = []int32{
|
||||||
12, // 0: memos.api.v2.Memo.row_status:type_name -> memos.api.v2.RowStatus
|
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
|
13, // 1: memos.api.v2.Memo.nodes:type_name -> memos.api.v2.Node
|
||||||
0, // 2: memos.api.v2.CreateMemoRequest.visibility:type_name -> memos.api.v2.Visibility
|
0, // 2: memos.api.v2.Memo.visibility:type_name -> memos.api.v2.Visibility
|
||||||
1, // 3: memos.api.v2.CreateMemoResponse.memo:type_name -> memos.api.v2.Memo
|
0, // 3: memos.api.v2.CreateMemoRequest.visibility:type_name -> memos.api.v2.Visibility
|
||||||
1, // 4: memos.api.v2.ListMemosResponse.memos:type_name -> memos.api.v2.Memo
|
1, // 4: memos.api.v2.CreateMemoResponse.memo:type_name -> memos.api.v2.Memo
|
||||||
1, // 5: memos.api.v2.GetMemoResponse.memo:type_name -> memos.api.v2.Memo
|
1, // 5: memos.api.v2.ListMemosResponse.memos:type_name -> memos.api.v2.Memo
|
||||||
2, // 6: memos.api.v2.CreateMemoCommentRequest.create:type_name -> memos.api.v2.CreateMemoRequest
|
1, // 6: memos.api.v2.GetMemoResponse.memo:type_name -> memos.api.v2.Memo
|
||||||
1, // 7: memos.api.v2.CreateMemoCommentResponse.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.ListMemoCommentsResponse.memos:type_name -> memos.api.v2.Memo
|
1, // 8: memos.api.v2.CreateMemoCommentResponse.memo:type_name -> memos.api.v2.Memo
|
||||||
2, // 9: memos.api.v2.MemoService.CreateMemo:input_type -> memos.api.v2.CreateMemoRequest
|
1, // 9: memos.api.v2.ListMemoCommentsResponse.memos:type_name -> memos.api.v2.Memo
|
||||||
4, // 10: memos.api.v2.MemoService.ListMemos:input_type -> memos.api.v2.ListMemosRequest
|
2, // 10: memos.api.v2.MemoService.CreateMemo:input_type -> memos.api.v2.CreateMemoRequest
|
||||||
6, // 11: memos.api.v2.MemoService.GetMemo:input_type -> memos.api.v2.GetMemoRequest
|
4, // 11: memos.api.v2.MemoService.ListMemos:input_type -> memos.api.v2.ListMemosRequest
|
||||||
8, // 12: memos.api.v2.MemoService.CreateMemoComment:input_type -> memos.api.v2.CreateMemoCommentRequest
|
6, // 12: memos.api.v2.MemoService.GetMemo:input_type -> memos.api.v2.GetMemoRequest
|
||||||
10, // 13: memos.api.v2.MemoService.ListMemoComments:input_type -> memos.api.v2.ListMemoCommentsRequest
|
8, // 13: memos.api.v2.MemoService.CreateMemoComment:input_type -> memos.api.v2.CreateMemoCommentRequest
|
||||||
3, // 14: memos.api.v2.MemoService.CreateMemo:output_type -> memos.api.v2.CreateMemoResponse
|
10, // 14: memos.api.v2.MemoService.ListMemoComments:input_type -> memos.api.v2.ListMemoCommentsRequest
|
||||||
5, // 15: memos.api.v2.MemoService.ListMemos:output_type -> memos.api.v2.ListMemosResponse
|
3, // 15: memos.api.v2.MemoService.CreateMemo:output_type -> memos.api.v2.CreateMemoResponse
|
||||||
7, // 16: memos.api.v2.MemoService.GetMemo:output_type -> memos.api.v2.GetMemoResponse
|
5, // 16: memos.api.v2.MemoService.ListMemos:output_type -> memos.api.v2.ListMemosResponse
|
||||||
9, // 17: memos.api.v2.MemoService.CreateMemoComment:output_type -> memos.api.v2.CreateMemoCommentResponse
|
7, // 17: memos.api.v2.MemoService.GetMemo:output_type -> memos.api.v2.GetMemoResponse
|
||||||
11, // 18: memos.api.v2.MemoService.ListMemoComments:output_type -> memos.api.v2.ListMemoCommentsResponse
|
9, // 18: memos.api.v2.MemoService.CreateMemoComment:output_type -> memos.api.v2.CreateMemoCommentResponse
|
||||||
14, // [14:19] is the sub-list for method output_type
|
11, // 19: memos.api.v2.MemoService.ListMemoComments:output_type -> memos.api.v2.ListMemoCommentsResponse
|
||||||
9, // [9:14] is the sub-list for method input_type
|
15, // [15:20] is the sub-list for method output_type
|
||||||
9, // [9:9] is the sub-list for extension type_name
|
10, // [10:15] is the sub-list for method input_type
|
||||||
9, // [9:9] is the sub-list for extension extendee
|
10, // [10:10] is the sub-list for extension type_name
|
||||||
0, // [0:9] is the sub-list for field 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() }
|
func init() { file_api_v2_memo_service_proto_init() }
|
||||||
@ -882,6 +897,7 @@ func file_api_v2_memo_service_proto_init() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
file_api_v2_common_proto_init()
|
file_api_v2_common_proto_init()
|
||||||
|
file_api_v2_markdown_service_proto_init()
|
||||||
if !protoimpl.UnsafeEnabled {
|
if !protoimpl.UnsafeEnabled {
|
||||||
file_api_v2_memo_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
file_api_v2_memo_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*Memo); i {
|
switch v := v.(*Memo); i {
|
||||||
|
Loading…
Reference in New Issue
Block a user