diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
new file mode 100644
index 0000000..8866613
--- /dev/null
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,68 @@
+name: Generate docs
+on: [push]
+
+jobs:
+ docs:
+ name: Generate docs
+ runs-on: ubuntu-latest
+ steps:
+ - name: Set up Go 1.13
+ uses: actions/setup-go@v2
+ with:
+ go-version: 1.13
+ id: go
+
+ - name: Install Protoc
+ uses: arduino/setup-protoc@master
+
+ - name: Check out this code
+ uses: actions/checkout@v2
+ with:
+ path: services
+
+ - name: Check out micro code
+ uses: actions/checkout@v2
+ with:
+ repository: 'micro/micro'
+ path: 'micro'
+ ref: 'master'
+
+ - name: Enable caching
+ uses: actions/cache@v2
+ with:
+ path: ~/go/pkg/mod
+ key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
+ restore-keys: |
+ ${{ runner.os }}-go-
+
+ - name: Install protoc gen micro plugin
+ working-directory: micro/cmd/protoc-gen-micro
+ run: |
+ go get -u github.com/golang/protobuf/protoc-gen-go
+ go install
+
+ - name: Install redoc cli
+ run: |
+ # https://github.com/actions/virtual-environments/issues/599
+ sudo npm install -g redoc-cli
+
+ - name: Install openapi plugin
+ working-directory: micro/cmd/protoc-gen-openapi
+ run: |
+ go install
+
+ - name: Install hugo
+ run: sudo snap install hugo --channel=extended
+
+ - name: Generate openapi spec and html
+ working-directory: services
+ run: |
+ go run cmd/docgen/main.go .
+
+ - name: Deploy
+ uses: s0/git-publish-subdir-action@develop
+ env:
+ REPO: self
+ BRANCH: gh-pages
+ FOLDER: services/docs
+ GITHUB_TOKEN: ${{ secrets.GH_PAT }}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f8bbd2d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+api-protobuf.json
+api-*.json
+redoc-static.html
+!docs
diff --git a/blog/Makefile b/blog/Makefile
index f45b9a4..25f53aa 100644
--- a/blog/Makefile
+++ b/blog/Makefile
@@ -7,8 +7,13 @@ init:
go get github.com/micro/micro/v3/cmd/protoc-gen-micro
.PHONY: proto
proto:
- protoc --proto_path=$$GOPATH/src:. --micro_out=. --go_out=:. proto/blog.proto
-
+ protoc --openapi_out=. --proto_path=$$GOPATH/src:. --micro_out=. --go_out=:. proto/blog.proto
+
+.PHONY: docs
+docs:
+ protoc --openapi_out=. --proto_path=$$GOPATH/src:. --micro_out=. --go_out=:. proto/blog.proto
+ @redoc-cli bundle api-protobuf.json
+
.PHONY: build
build:
go build -o blog *.go
diff --git a/blog/comments/proto/comments.proto b/blog/comments/proto/comments.proto
index 8e28846..37c3da9 100644
--- a/blog/comments/proto/comments.proto
+++ b/blog/comments/proto/comments.proto
@@ -1,6 +1,7 @@
syntax = "proto3";
package comments;
+option go_package = "proto;comments";
service Comments {
rpc New(NewRequest) returns (NewResponse) {}
diff --git a/blog/feeds/proto/feeds.pb.go b/blog/feeds/proto/feeds.pb.go
deleted file mode 100644
index bf3bc02..0000000
--- a/blog/feeds/proto/feeds.pb.go
+++ /dev/null
@@ -1,340 +0,0 @@
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// source: proto/feeds.proto
-
-package feeds
-
-import (
- fmt "fmt"
- proto "github.com/golang/protobuf/proto"
- math "math"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
-
-type Feed struct {
- // rss feed name
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- // rss feed url
- Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Feed) Reset() { *m = Feed{} }
-func (m *Feed) String() string { return proto.CompactTextString(m) }
-func (*Feed) ProtoMessage() {}
-func (*Feed) Descriptor() ([]byte, []int) {
- return fileDescriptor_dd517c38176c13bf, []int{0}
-}
-
-func (m *Feed) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_Feed.Unmarshal(m, b)
-}
-func (m *Feed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_Feed.Marshal(b, m, deterministic)
-}
-func (m *Feed) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Feed.Merge(m, src)
-}
-func (m *Feed) XXX_Size() int {
- return xxx_messageInfo_Feed.Size(m)
-}
-func (m *Feed) XXX_DiscardUnknown() {
- xxx_messageInfo_Feed.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Feed proto.InternalMessageInfo
-
-func (m *Feed) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-func (m *Feed) GetUrl() string {
- if m != nil {
- return m.Url
- }
- return ""
-}
-
-type Entry struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"`
- Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"`
- Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"`
- Content string `protobuf:"bytes,5,opt,name=content,proto3" json:"content,omitempty"`
- Date int64 `protobuf:"varint,6,opt,name=date,proto3" json:"date,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Entry) Reset() { *m = Entry{} }
-func (m *Entry) String() string { return proto.CompactTextString(m) }
-func (*Entry) ProtoMessage() {}
-func (*Entry) Descriptor() ([]byte, []int) {
- return fileDescriptor_dd517c38176c13bf, []int{1}
-}
-
-func (m *Entry) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_Entry.Unmarshal(m, b)
-}
-func (m *Entry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_Entry.Marshal(b, m, deterministic)
-}
-func (m *Entry) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Entry.Merge(m, src)
-}
-func (m *Entry) XXX_Size() int {
- return xxx_messageInfo_Entry.Size(m)
-}
-func (m *Entry) XXX_DiscardUnknown() {
- xxx_messageInfo_Entry.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Entry proto.InternalMessageInfo
-
-func (m *Entry) GetId() string {
- if m != nil {
- return m.Id
- }
- return ""
-}
-
-func (m *Entry) GetDomain() string {
- if m != nil {
- return m.Domain
- }
- return ""
-}
-
-func (m *Entry) GetUrl() string {
- if m != nil {
- return m.Url
- }
- return ""
-}
-
-func (m *Entry) GetTitle() string {
- if m != nil {
- return m.Title
- }
- return ""
-}
-
-func (m *Entry) GetContent() string {
- if m != nil {
- return m.Content
- }
- return ""
-}
-
-func (m *Entry) GetDate() int64 {
- if m != nil {
- return m.Date
- }
- return 0
-}
-
-type NewRequest struct {
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NewRequest) Reset() { *m = NewRequest{} }
-func (m *NewRequest) String() string { return proto.CompactTextString(m) }
-func (*NewRequest) ProtoMessage() {}
-func (*NewRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_dd517c38176c13bf, []int{2}
-}
-
-func (m *NewRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NewRequest.Unmarshal(m, b)
-}
-func (m *NewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NewRequest.Marshal(b, m, deterministic)
-}
-func (m *NewRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NewRequest.Merge(m, src)
-}
-func (m *NewRequest) XXX_Size() int {
- return xxx_messageInfo_NewRequest.Size(m)
-}
-func (m *NewRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NewRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NewRequest proto.InternalMessageInfo
-
-func (m *NewRequest) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-func (m *NewRequest) GetUrl() string {
- if m != nil {
- return m.Url
- }
- return ""
-}
-
-type NewResponse struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *NewResponse) Reset() { *m = NewResponse{} }
-func (m *NewResponse) String() string { return proto.CompactTextString(m) }
-func (*NewResponse) ProtoMessage() {}
-func (*NewResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_dd517c38176c13bf, []int{3}
-}
-
-func (m *NewResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NewResponse.Unmarshal(m, b)
-}
-func (m *NewResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NewResponse.Marshal(b, m, deterministic)
-}
-func (m *NewResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NewResponse.Merge(m, src)
-}
-func (m *NewResponse) XXX_Size() int {
- return xxx_messageInfo_NewResponse.Size(m)
-}
-func (m *NewResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_NewResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NewResponse proto.InternalMessageInfo
-
-type EntriesRequest struct {
- Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *EntriesRequest) Reset() { *m = EntriesRequest{} }
-func (m *EntriesRequest) String() string { return proto.CompactTextString(m) }
-func (*EntriesRequest) ProtoMessage() {}
-func (*EntriesRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_dd517c38176c13bf, []int{4}
-}
-
-func (m *EntriesRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_EntriesRequest.Unmarshal(m, b)
-}
-func (m *EntriesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_EntriesRequest.Marshal(b, m, deterministic)
-}
-func (m *EntriesRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_EntriesRequest.Merge(m, src)
-}
-func (m *EntriesRequest) XXX_Size() int {
- return xxx_messageInfo_EntriesRequest.Size(m)
-}
-func (m *EntriesRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_EntriesRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_EntriesRequest proto.InternalMessageInfo
-
-func (m *EntriesRequest) GetUrl() string {
- if m != nil {
- return m.Url
- }
- return ""
-}
-
-type EntriesResponse struct {
- Entries []*Entry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *EntriesResponse) Reset() { *m = EntriesResponse{} }
-func (m *EntriesResponse) String() string { return proto.CompactTextString(m) }
-func (*EntriesResponse) ProtoMessage() {}
-func (*EntriesResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_dd517c38176c13bf, []int{5}
-}
-
-func (m *EntriesResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_EntriesResponse.Unmarshal(m, b)
-}
-func (m *EntriesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_EntriesResponse.Marshal(b, m, deterministic)
-}
-func (m *EntriesResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_EntriesResponse.Merge(m, src)
-}
-func (m *EntriesResponse) XXX_Size() int {
- return xxx_messageInfo_EntriesResponse.Size(m)
-}
-func (m *EntriesResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_EntriesResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_EntriesResponse proto.InternalMessageInfo
-
-func (m *EntriesResponse) GetEntries() []*Entry {
- if m != nil {
- return m.Entries
- }
- return nil
-}
-
-func init() {
- proto.RegisterType((*Feed)(nil), "feeds.Feed")
- proto.RegisterType((*Entry)(nil), "feeds.Entry")
- proto.RegisterType((*NewRequest)(nil), "feeds.NewRequest")
- proto.RegisterType((*NewResponse)(nil), "feeds.NewResponse")
- proto.RegisterType((*EntriesRequest)(nil), "feeds.EntriesRequest")
- proto.RegisterType((*EntriesResponse)(nil), "feeds.EntriesResponse")
-}
-
-func init() {
- proto.RegisterFile("proto/feeds.proto", fileDescriptor_dd517c38176c13bf)
-}
-
-var fileDescriptor_dd517c38176c13bf = []byte{
- // 282 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x8c, 0x51, 0x3d, 0x4f, 0xc3, 0x30,
- 0x10, 0x25, 0xcd, 0x97, 0xb8, 0xd0, 0x42, 0x4f, 0x50, 0x59, 0x9d, 0x50, 0x06, 0xd4, 0x01, 0x05,
- 0x29, 0x4c, 0xc0, 0x86, 0x04, 0x23, 0x43, 0x46, 0xb6, 0x40, 0x0e, 0x29, 0x52, 0x6b, 0x97, 0xd8,
- 0x15, 0xe2, 0x07, 0xf0, 0xbf, 0x71, 0x2e, 0x76, 0x53, 0x31, 0xb1, 0xbd, 0xf7, 0xf2, 0xde, 0xdd,
- 0xcb, 0x19, 0xe6, 0xdb, 0x4e, 0x19, 0x75, 0xf3, 0x41, 0xd4, 0xe8, 0x82, 0x31, 0xc6, 0x4c, 0xf2,
- 0x6b, 0x88, 0x9e, 0x2d, 0x40, 0x84, 0x48, 0xd6, 0x1b, 0x12, 0xc1, 0x65, 0xb0, 0x3a, 0xae, 0x18,
- 0xe3, 0x19, 0x84, 0xbb, 0x6e, 0x2d, 0x26, 0x2c, 0xf5, 0x30, 0xff, 0x09, 0x20, 0x7e, 0x92, 0xa6,
- 0xfb, 0xc6, 0x19, 0x4c, 0xda, 0xc6, 0xb9, 0x2d, 0xc2, 0x05, 0x24, 0x8d, 0xda, 0xd4, 0xad, 0x74,
- 0x76, 0xc7, 0xfc, 0x8c, 0x70, 0x3f, 0x03, 0xcf, 0x21, 0x36, 0xad, 0x59, 0x93, 0x88, 0x58, 0x1b,
- 0x08, 0x0a, 0x48, 0xdf, 0x95, 0x34, 0x24, 0x8d, 0x88, 0x59, 0xf7, 0xb4, 0x6f, 0xd6, 0xd4, 0x86,
- 0x44, 0x62, 0xe5, 0xb0, 0x62, 0x9c, 0x97, 0x00, 0x2f, 0xf4, 0x55, 0xd1, 0xe7, 0x8e, 0xb4, 0xf9,
- 0x67, 0xf7, 0x29, 0x64, 0x9c, 0xd1, 0x5b, 0x25, 0x35, 0xe5, 0x39, 0xcc, 0xfa, 0x3f, 0x69, 0x49,
- 0xfb, 0x31, 0x2e, 0x12, 0x8c, 0x91, 0x3b, 0x38, 0xdd, 0x7b, 0x86, 0x18, 0x5e, 0x41, 0x4a, 0x83,
- 0x64, 0x8d, 0xe1, 0x2a, 0x2b, 0x4f, 0x8a, 0xe1, 0xaa, 0x7c, 0x96, 0xca, 0x7f, 0x2c, 0x35, 0xc4,
- 0xfd, 0x5d, 0x35, 0x16, 0x10, 0xda, 0xb5, 0x38, 0x77, 0xb6, 0xb1, 0xf6, 0x12, 0x0f, 0x25, 0xd7,
- 0xea, 0x08, 0xef, 0x21, 0x75, 0x3b, 0xf1, 0xe2, 0x60, 0xf4, 0xd8, 0x73, 0xb9, 0xf8, 0x2b, 0xfb,
- 0xec, 0xe3, 0xf4, 0x35, 0xe3, 0xc7, 0x7d, 0x60, 0xc3, 0x5b, 0xc2, 0xe4, 0xf6, 0x37, 0x00, 0x00,
- 0xff, 0xff, 0x66, 0x49, 0x14, 0x45, 0xfe, 0x01, 0x00, 0x00,
-}
diff --git a/blog/handler/blog.go b/blog/handler/blog.go
index 3cea2a2..abf9977 100644
--- a/blog/handler/blog.go
+++ b/blog/handler/blog.go
@@ -3,10 +3,10 @@ package handler
import (
"context"
- comments "github.com/micro/services/blog/comments/proto"
- posts "github.com/micro/services/blog/posts/proto"
+ comments "github.com/micro/services/comments/proto"
+ posts "github.com/micro/services/posts/proto"
proto "github.com/micro/services/blog/proto"
- tags "github.com/micro/services/blog/tags/proto"
+ tags "github.com/micro/services/tags/proto"
)
type Blog struct {
diff --git a/blog/main.go b/blog/main.go
index 8a0b243..e8a472a 100644
--- a/blog/main.go
+++ b/blog/main.go
@@ -1,11 +1,11 @@
package main
import (
- comments "github.com/micro/services/blog/comments/proto"
+ comments "github.com/micro/services/comments/proto"
"github.com/micro/services/blog/handler"
- posts "github.com/micro/services/blog/posts/proto"
+ posts "github.com/micro/services/posts/proto"
proto "github.com/micro/services/blog/proto"
- tags "github.com/micro/services/blog/tags/proto"
+ tags "github.com/micro/services/tags/proto"
"github.com/micro/micro/v3/service"
"github.com/micro/micro/v3/service/logger"
diff --git a/blog/posts/README.md b/blog/posts/README.md
deleted file mode 100644
index 96b2257..0000000
--- a/blog/posts/README.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Post Service
-
-The posts service stores posts
-
-## Usage
-
-### Create a post
-
-```
-micro call posts Posts.Save '{"post":{"id":"1","title":"How to Micro","content":"Simply put, Micro is awesome."}}'
-micro call posts Posts.Save '{"post":{"id":"2","title":"Fresh posts are fresh","content":"This post is fresher than the How to Micro one"}}'
-```
-
-### Create a post with tags
-
-```
-micro call posts Posts.Save '{"post":{"id":"3","title":"How to do epic things with Micro","content":"Everything is awesome.","tagNames":["a","b"]}}'
-```
-
-### Query posts
-
-```
-micro call posts Posts.Query '{}'
-micro call posts Posts.Query '{"slug":"how-to-micro"}'
-micro call posts Posts.Query '{"offset": 10, "limit": 10}'
-```
-
-### Delete posts
-
-```
-micro call posts Posts.Delete '{"offset": 10, "limit": 10}'
-```
diff --git a/blog/posts/proto/posts.pb.go b/blog/posts/proto/posts.pb.go
deleted file mode 100644
index a9386c8..0000000
--- a/blog/posts/proto/posts.pb.go
+++ /dev/null
@@ -1,498 +0,0 @@
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// source: proto/posts.proto
-
-package posts
-
-import (
- fmt "fmt"
- proto "github.com/golang/protobuf/proto"
- math "math"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
-
-type Post struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
- Slug string `protobuf:"bytes,3,opt,name=slug,proto3" json:"slug,omitempty"`
- Content string `protobuf:"bytes,4,opt,name=content,proto3" json:"content,omitempty"`
- Created int64 `protobuf:"varint,5,opt,name=created,proto3" json:"created,omitempty"`
- Updated int64 `protobuf:"varint,6,opt,name=updated,proto3" json:"updated,omitempty"`
- Author string `protobuf:"bytes,7,opt,name=author,proto3" json:"author,omitempty"`
- Tags []string `protobuf:"bytes,8,rep,name=tags,proto3" json:"tags,omitempty"`
- Metadata map[string]string `protobuf:"bytes,9,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- Image string `protobuf:"bytes,19,opt,name=image,proto3" json:"image,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Post) Reset() { *m = Post{} }
-func (m *Post) String() string { return proto.CompactTextString(m) }
-func (*Post) ProtoMessage() {}
-func (*Post) Descriptor() ([]byte, []int) {
- return fileDescriptor_e93dc7d934d9dc10, []int{0}
-}
-
-func (m *Post) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_Post.Unmarshal(m, b)
-}
-func (m *Post) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_Post.Marshal(b, m, deterministic)
-}
-func (m *Post) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Post.Merge(m, src)
-}
-func (m *Post) XXX_Size() int {
- return xxx_messageInfo_Post.Size(m)
-}
-func (m *Post) XXX_DiscardUnknown() {
- xxx_messageInfo_Post.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Post proto.InternalMessageInfo
-
-func (m *Post) GetId() string {
- if m != nil {
- return m.Id
- }
- return ""
-}
-
-func (m *Post) GetTitle() string {
- if m != nil {
- return m.Title
- }
- return ""
-}
-
-func (m *Post) GetSlug() string {
- if m != nil {
- return m.Slug
- }
- return ""
-}
-
-func (m *Post) GetContent() string {
- if m != nil {
- return m.Content
- }
- return ""
-}
-
-func (m *Post) GetCreated() int64 {
- if m != nil {
- return m.Created
- }
- return 0
-}
-
-func (m *Post) GetUpdated() int64 {
- if m != nil {
- return m.Updated
- }
- return 0
-}
-
-func (m *Post) GetAuthor() string {
- if m != nil {
- return m.Author
- }
- return ""
-}
-
-func (m *Post) GetTags() []string {
- if m != nil {
- return m.Tags
- }
- return nil
-}
-
-func (m *Post) GetMetadata() map[string]string {
- if m != nil {
- return m.Metadata
- }
- return nil
-}
-
-func (m *Post) GetImage() string {
- if m != nil {
- return m.Image
- }
- return ""
-}
-
-// Query posts. Acts as a listing when no id or slug provided.
-// Gets a single post by id or slug if any of them provided.
-type QueryRequest struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Slug string `protobuf:"bytes,2,opt,name=slug,proto3" json:"slug,omitempty"`
- Tag string `protobuf:"bytes,3,opt,name=tag,proto3" json:"tag,omitempty"`
- Offset int64 `protobuf:"varint,4,opt,name=offset,proto3" json:"offset,omitempty"`
- Limit int64 `protobuf:"varint,5,opt,name=limit,proto3" json:"limit,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *QueryRequest) Reset() { *m = QueryRequest{} }
-func (m *QueryRequest) String() string { return proto.CompactTextString(m) }
-func (*QueryRequest) ProtoMessage() {}
-func (*QueryRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e93dc7d934d9dc10, []int{1}
-}
-
-func (m *QueryRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_QueryRequest.Unmarshal(m, b)
-}
-func (m *QueryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_QueryRequest.Marshal(b, m, deterministic)
-}
-func (m *QueryRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_QueryRequest.Merge(m, src)
-}
-func (m *QueryRequest) XXX_Size() int {
- return xxx_messageInfo_QueryRequest.Size(m)
-}
-func (m *QueryRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_QueryRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_QueryRequest proto.InternalMessageInfo
-
-func (m *QueryRequest) GetId() string {
- if m != nil {
- return m.Id
- }
- return ""
-}
-
-func (m *QueryRequest) GetSlug() string {
- if m != nil {
- return m.Slug
- }
- return ""
-}
-
-func (m *QueryRequest) GetTag() string {
- if m != nil {
- return m.Tag
- }
- return ""
-}
-
-func (m *QueryRequest) GetOffset() int64 {
- if m != nil {
- return m.Offset
- }
- return 0
-}
-
-func (m *QueryRequest) GetLimit() int64 {
- if m != nil {
- return m.Limit
- }
- return 0
-}
-
-type QueryResponse struct {
- Posts []*Post `protobuf:"bytes,1,rep,name=posts,proto3" json:"posts,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *QueryResponse) Reset() { *m = QueryResponse{} }
-func (m *QueryResponse) String() string { return proto.CompactTextString(m) }
-func (*QueryResponse) ProtoMessage() {}
-func (*QueryResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e93dc7d934d9dc10, []int{2}
-}
-
-func (m *QueryResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_QueryResponse.Unmarshal(m, b)
-}
-func (m *QueryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_QueryResponse.Marshal(b, m, deterministic)
-}
-func (m *QueryResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_QueryResponse.Merge(m, src)
-}
-func (m *QueryResponse) XXX_Size() int {
- return xxx_messageInfo_QueryResponse.Size(m)
-}
-func (m *QueryResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_QueryResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_QueryResponse proto.InternalMessageInfo
-
-func (m *QueryResponse) GetPosts() []*Post {
- if m != nil {
- return m.Posts
- }
- return nil
-}
-
-type SaveRequest struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
- Slug string `protobuf:"bytes,3,opt,name=slug,proto3" json:"slug,omitempty"`
- Content string `protobuf:"bytes,4,opt,name=content,proto3" json:"content,omitempty"`
- Timestamp int64 `protobuf:"varint,5,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
- // When updating a post and wanting to delete all tags,
- // send a list of tags with only one member being an empty string [""]
- Tags []string `protobuf:"bytes,6,rep,name=tags,proto3" json:"tags,omitempty"`
- Metadata map[string]string `protobuf:"bytes,7,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- Image string `protobuf:"bytes,8,opt,name=image,proto3" json:"image,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *SaveRequest) Reset() { *m = SaveRequest{} }
-func (m *SaveRequest) String() string { return proto.CompactTextString(m) }
-func (*SaveRequest) ProtoMessage() {}
-func (*SaveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e93dc7d934d9dc10, []int{3}
-}
-
-func (m *SaveRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_SaveRequest.Unmarshal(m, b)
-}
-func (m *SaveRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_SaveRequest.Marshal(b, m, deterministic)
-}
-func (m *SaveRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_SaveRequest.Merge(m, src)
-}
-func (m *SaveRequest) XXX_Size() int {
- return xxx_messageInfo_SaveRequest.Size(m)
-}
-func (m *SaveRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_SaveRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SaveRequest proto.InternalMessageInfo
-
-func (m *SaveRequest) GetId() string {
- if m != nil {
- return m.Id
- }
- return ""
-}
-
-func (m *SaveRequest) GetTitle() string {
- if m != nil {
- return m.Title
- }
- return ""
-}
-
-func (m *SaveRequest) GetSlug() string {
- if m != nil {
- return m.Slug
- }
- return ""
-}
-
-func (m *SaveRequest) GetContent() string {
- if m != nil {
- return m.Content
- }
- return ""
-}
-
-func (m *SaveRequest) GetTimestamp() int64 {
- if m != nil {
- return m.Timestamp
- }
- return 0
-}
-
-func (m *SaveRequest) GetTags() []string {
- if m != nil {
- return m.Tags
- }
- return nil
-}
-
-func (m *SaveRequest) GetMetadata() map[string]string {
- if m != nil {
- return m.Metadata
- }
- return nil
-}
-
-func (m *SaveRequest) GetImage() string {
- if m != nil {
- return m.Image
- }
- return ""
-}
-
-type SaveResponse struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *SaveResponse) Reset() { *m = SaveResponse{} }
-func (m *SaveResponse) String() string { return proto.CompactTextString(m) }
-func (*SaveResponse) ProtoMessage() {}
-func (*SaveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e93dc7d934d9dc10, []int{4}
-}
-
-func (m *SaveResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_SaveResponse.Unmarshal(m, b)
-}
-func (m *SaveResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_SaveResponse.Marshal(b, m, deterministic)
-}
-func (m *SaveResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_SaveResponse.Merge(m, src)
-}
-func (m *SaveResponse) XXX_Size() int {
- return xxx_messageInfo_SaveResponse.Size(m)
-}
-func (m *SaveResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_SaveResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SaveResponse proto.InternalMessageInfo
-
-func (m *SaveResponse) GetId() string {
- if m != nil {
- return m.Id
- }
- return ""
-}
-
-type DeleteRequest struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *DeleteRequest) Reset() { *m = DeleteRequest{} }
-func (m *DeleteRequest) String() string { return proto.CompactTextString(m) }
-func (*DeleteRequest) ProtoMessage() {}
-func (*DeleteRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_e93dc7d934d9dc10, []int{5}
-}
-
-func (m *DeleteRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_DeleteRequest.Unmarshal(m, b)
-}
-func (m *DeleteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_DeleteRequest.Marshal(b, m, deterministic)
-}
-func (m *DeleteRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_DeleteRequest.Merge(m, src)
-}
-func (m *DeleteRequest) XXX_Size() int {
- return xxx_messageInfo_DeleteRequest.Size(m)
-}
-func (m *DeleteRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_DeleteRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_DeleteRequest proto.InternalMessageInfo
-
-func (m *DeleteRequest) GetId() string {
- if m != nil {
- return m.Id
- }
- return ""
-}
-
-type DeleteResponse struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *DeleteResponse) Reset() { *m = DeleteResponse{} }
-func (m *DeleteResponse) String() string { return proto.CompactTextString(m) }
-func (*DeleteResponse) ProtoMessage() {}
-func (*DeleteResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_e93dc7d934d9dc10, []int{6}
-}
-
-func (m *DeleteResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_DeleteResponse.Unmarshal(m, b)
-}
-func (m *DeleteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_DeleteResponse.Marshal(b, m, deterministic)
-}
-func (m *DeleteResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_DeleteResponse.Merge(m, src)
-}
-func (m *DeleteResponse) XXX_Size() int {
- return xxx_messageInfo_DeleteResponse.Size(m)
-}
-func (m *DeleteResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_DeleteResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_DeleteResponse proto.InternalMessageInfo
-
-func init() {
- proto.RegisterType((*Post)(nil), "posts.Post")
- proto.RegisterMapType((map[string]string)(nil), "posts.Post.MetadataEntry")
- proto.RegisterType((*QueryRequest)(nil), "posts.QueryRequest")
- proto.RegisterType((*QueryResponse)(nil), "posts.QueryResponse")
- proto.RegisterType((*SaveRequest)(nil), "posts.SaveRequest")
- proto.RegisterMapType((map[string]string)(nil), "posts.SaveRequest.MetadataEntry")
- proto.RegisterType((*SaveResponse)(nil), "posts.SaveResponse")
- proto.RegisterType((*DeleteRequest)(nil), "posts.DeleteRequest")
- proto.RegisterType((*DeleteResponse)(nil), "posts.DeleteResponse")
-}
-
-func init() {
- proto.RegisterFile("proto/posts.proto", fileDescriptor_e93dc7d934d9dc10)
-}
-
-var fileDescriptor_e93dc7d934d9dc10 = []byte{
- // 447 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x54, 0xcb, 0xae, 0xd3, 0x40,
- 0x0c, 0x25, 0xcf, 0xb6, 0xee, 0xed, 0x55, 0x71, 0x0b, 0x1a, 0x22, 0x04, 0x25, 0x2b, 0x56, 0x45,
- 0x14, 0x10, 0x08, 0x58, 0xc2, 0x12, 0x09, 0xc2, 0x17, 0x0c, 0x74, 0x5a, 0x22, 0xf2, 0x22, 0x33,
- 0xa9, 0xd4, 0xff, 0x61, 0xc3, 0x7f, 0xf0, 0x61, 0xcc, 0x2b, 0x21, 0x29, 0x54, 0x77, 0xd3, 0x9d,
- 0x8f, 0x3d, 0xb6, 0x8f, 0xcf, 0x89, 0x02, 0xb7, 0xab, 0xba, 0x14, 0xe5, 0x93, 0xaa, 0xe4, 0x82,
- 0xaf, 0x75, 0x8c, 0x81, 0x06, 0xf1, 0x6f, 0x17, 0xfc, 0x8f, 0x32, 0xc2, 0x6b, 0x70, 0xd3, 0x2d,
- 0x71, 0x56, 0xce, 0xe3, 0x49, 0x22, 0x23, 0x5c, 0x42, 0x20, 0x52, 0x91, 0x31, 0xe2, 0xea, 0x94,
- 0x01, 0x88, 0xe0, 0xf3, 0xac, 0xd9, 0x13, 0x4f, 0x27, 0x75, 0x8c, 0x04, 0x46, 0x5f, 0xcb, 0x42,
- 0xb0, 0x42, 0x10, 0x5f, 0xa7, 0x5b, 0xa8, 0x2b, 0x35, 0xa3, 0x82, 0x6d, 0x49, 0x20, 0x2b, 0x5e,
- 0xd2, 0x42, 0x55, 0x69, 0xaa, 0xad, 0xae, 0x84, 0xa6, 0x62, 0x21, 0xde, 0x85, 0x90, 0x36, 0xe2,
- 0x5b, 0x59, 0x93, 0x91, 0x1e, 0x66, 0x91, 0xda, 0x2c, 0xe8, 0x9e, 0x93, 0xf1, 0xca, 0x53, 0x9b,
- 0x55, 0x8c, 0x2f, 0x60, 0x9c, 0x33, 0x41, 0x65, 0x23, 0x25, 0x13, 0x99, 0x9f, 0x6e, 0xee, 0xad,
- 0xcd, 0x8d, 0xea, 0xa4, 0xf5, 0x07, 0x5b, 0x7b, 0x5f, 0x88, 0xfa, 0x98, 0x74, 0x4f, 0xd5, 0x69,
- 0x69, 0x4e, 0xf7, 0x8c, 0x2c, 0xcc, 0x69, 0x1a, 0x44, 0x6f, 0x60, 0x36, 0x68, 0xc0, 0x39, 0x78,
- 0xdf, 0xd9, 0xd1, 0x4a, 0xa2, 0x42, 0xd5, 0x78, 0xa0, 0x59, 0xd3, 0x69, 0xa2, 0xc1, 0x6b, 0xf7,
- 0x95, 0x13, 0xd7, 0x70, 0xf5, 0xa9, 0x61, 0x72, 0x0b, 0xfb, 0xd1, 0xb0, 0xff, 0xa8, 0xd9, 0xea,
- 0xe6, 0xf6, 0x74, 0x93, 0xf3, 0xe5, 0x15, 0x56, 0x4a, 0x15, 0xaa, 0xdb, 0xcb, 0xdd, 0x8e, 0x33,
- 0x23, 0xa4, 0x97, 0x58, 0xa4, 0xf6, 0x66, 0x69, 0x9e, 0x0a, 0xab, 0xa2, 0x01, 0xf1, 0x06, 0x66,
- 0x76, 0x27, 0xaf, 0xca, 0x82, 0x33, 0x7c, 0x04, 0xc6, 0x54, 0xb9, 0x57, 0x69, 0x31, 0xed, 0x69,
- 0x91, 0x58, 0xbb, 0x7f, 0xba, 0x30, 0xfd, 0x4c, 0x0f, 0xec, 0x1c, 0xcf, 0x4b, 0xb8, 0x7e, 0x1f,
- 0x26, 0x22, 0xcd, 0xe5, 0x74, 0x9a, 0x57, 0x96, 0xf1, 0xdf, 0x44, 0xe7, 0x63, 0xd8, 0xf3, 0xf1,
- 0x6d, 0xcf, 0xc7, 0x91, 0xe6, 0xbe, 0xb2, 0xdc, 0x7b, 0x5c, 0x6f, 0xb6, 0x73, 0x7c, 0x31, 0x3b,
- 0x1f, 0xc0, 0x95, 0xd9, 0x6c, 0x95, 0x3d, 0x91, 0x29, 0x7e, 0x08, 0xb3, 0x77, 0x2c, 0x63, 0xe2,
- 0x9c, 0x8e, 0xf1, 0x1c, 0xae, 0xdb, 0x07, 0x66, 0xc4, 0xe6, 0x97, 0x03, 0x81, 0x72, 0x82, 0xe3,
- 0x73, 0x08, 0xb4, 0x6f, 0xb8, 0xb0, 0x47, 0xf6, 0xbf, 0x9c, 0x68, 0x39, 0x4c, 0x9a, 0xee, 0xf8,
- 0x16, 0x3e, 0x05, 0x5f, 0x51, 0x42, 0xfc, 0x57, 0x99, 0x68, 0x31, 0xc8, 0x75, 0x2d, 0x2f, 0x21,
- 0x34, 0x24, 0xb0, 0x1d, 0x3a, 0x20, 0x1d, 0xdd, 0x39, 0xc9, 0xb6, 0x8d, 0x5f, 0x42, 0xfd, 0x8b,
- 0x78, 0xf6, 0x27, 0x00, 0x00, 0xff, 0xff, 0x17, 0x84, 0x7a, 0xa4, 0x37, 0x04, 0x00, 0x00,
-}
diff --git a/blog/proto/blog.pb.go b/blog/proto/blog.pb.go
index 472054c..066875d 100644
--- a/blog/proto/blog.pb.go
+++ b/blog/proto/blog.pb.go
@@ -1,116 +1,211 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.6.1
// source: proto/blog.proto
package blog
import (
- fmt "fmt"
proto "github.com/golang/protobuf/proto"
- proto1 "github.com/micro/services/blog/posts/proto"
- math "math"
+ proto1 "github.com/micro/services/posts/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
)
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
+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)
+)
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
type LatestRequest struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
}
-func (m *LatestRequest) Reset() { *m = LatestRequest{} }
-func (m *LatestRequest) String() string { return proto.CompactTextString(m) }
-func (*LatestRequest) ProtoMessage() {}
+func (x *LatestRequest) Reset() {
+ *x = LatestRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_blog_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *LatestRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LatestRequest) ProtoMessage() {}
+
+func (x *LatestRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_blog_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 LatestRequest.ProtoReflect.Descriptor instead.
func (*LatestRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_fc5203cdc85000bc, []int{0}
+ return file_proto_blog_proto_rawDescGZIP(), []int{0}
}
-func (m *LatestRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_LatestRequest.Unmarshal(m, b)
-}
-func (m *LatestRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_LatestRequest.Marshal(b, m, deterministic)
-}
-func (m *LatestRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LatestRequest.Merge(m, src)
-}
-func (m *LatestRequest) XXX_Size() int {
- return xxx_messageInfo_LatestRequest.Size(m)
-}
-func (m *LatestRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_LatestRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LatestRequest proto.InternalMessageInfo
-
type LatestResponse struct {
- Latest *proto1.Post `protobuf:"bytes,1,opt,name=latest,proto3" json:"latest,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Latest *proto1.Post `protobuf:"bytes,1,opt,name=latest,proto3" json:"latest,omitempty"`
}
-func (m *LatestResponse) Reset() { *m = LatestResponse{} }
-func (m *LatestResponse) String() string { return proto.CompactTextString(m) }
-func (*LatestResponse) ProtoMessage() {}
+func (x *LatestResponse) Reset() {
+ *x = LatestResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_blog_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *LatestResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LatestResponse) ProtoMessage() {}
+
+func (x *LatestResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_blog_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 LatestResponse.ProtoReflect.Descriptor instead.
func (*LatestResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_fc5203cdc85000bc, []int{1}
+ return file_proto_blog_proto_rawDescGZIP(), []int{1}
}
-func (m *LatestResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_LatestResponse.Unmarshal(m, b)
-}
-func (m *LatestResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_LatestResponse.Marshal(b, m, deterministic)
-}
-func (m *LatestResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LatestResponse.Merge(m, src)
-}
-func (m *LatestResponse) XXX_Size() int {
- return xxx_messageInfo_LatestResponse.Size(m)
-}
-func (m *LatestResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_LatestResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LatestResponse proto.InternalMessageInfo
-
-func (m *LatestResponse) GetLatest() *proto1.Post {
- if m != nil {
- return m.Latest
+func (x *LatestResponse) GetLatest() *proto1.Post {
+ if x != nil {
+ return x.Latest
}
return nil
}
-func init() {
- proto.RegisterType((*LatestRequest)(nil), "blog.LatestRequest")
- proto.RegisterType((*LatestResponse)(nil), "blog.LatestResponse")
+var File_proto_blog_proto protoreflect.FileDescriptor
+
+var file_proto_blog_proto_rawDesc = []byte{
+ 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x6c, 0x6f, 0x67, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x12, 0x04, 0x62, 0x6c, 0x6f, 0x67, 0x1a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69,
+ 0x63, 0x65, 0x73, 0x2f, 0x62, 0x6c, 0x6f, 0x67, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2f, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x22, 0x0f, 0x0a, 0x0d, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x22, 0x35, 0x0a, 0x0e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x50, 0x6f, 0x73, 0x74,
+ 0x52, 0x06, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x32, 0x3d, 0x0a, 0x04, 0x42, 0x6c, 0x6f, 0x67,
+ 0x12, 0x35, 0x0a, 0x06, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x13, 0x2e, 0x62, 0x6c, 0x6f,
+ 0x67, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x14, 0x2e, 0x62, 0x6c, 0x6f, 0x67, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
-func init() {
- proto.RegisterFile("proto/blog.proto", fileDescriptor_fc5203cdc85000bc)
+var (
+ file_proto_blog_proto_rawDescOnce sync.Once
+ file_proto_blog_proto_rawDescData = file_proto_blog_proto_rawDesc
+)
+
+func file_proto_blog_proto_rawDescGZIP() []byte {
+ file_proto_blog_proto_rawDescOnce.Do(func() {
+ file_proto_blog_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_blog_proto_rawDescData)
+ })
+ return file_proto_blog_proto_rawDescData
}
-var fileDescriptor_fc5203cdc85000bc = []byte{
- // 169 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x12, 0x28, 0x28, 0xca, 0x2f,
- 0xc9, 0xd7, 0x4f, 0xca, 0xc9, 0x4f, 0xd7, 0x03, 0x33, 0x85, 0x58, 0x40, 0x6c, 0x29, 0xb3, 0xf4,
- 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xdc, 0xcc, 0xe4, 0xa2, 0x7c, 0xfd,
- 0xe2, 0xd4, 0xa2, 0xb2, 0xcc, 0xe4, 0xd4, 0x62, 0xb0, 0x5a, 0xfd, 0x82, 0xfc, 0xe2, 0x92, 0x62,
- 0x7d, 0x88, 0x66, 0x30, 0x1b, 0xa2, 0x5b, 0x89, 0x9f, 0x8b, 0xd7, 0x27, 0xb1, 0x24, 0xb5, 0xb8,
- 0x24, 0x28, 0xb5, 0xb0, 0x14, 0x48, 0x29, 0x99, 0x72, 0xf1, 0xc1, 0x04, 0x8a, 0x0b, 0xf2, 0xf3,
- 0x8a, 0x53, 0x85, 0x94, 0xb9, 0xd8, 0x72, 0xc0, 0x22, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46,
- 0xdc, 0x7a, 0x10, 0x03, 0x02, 0x80, 0x64, 0x10, 0x54, 0xca, 0xc8, 0x96, 0x8b, 0xc5, 0x09, 0x68,
- 0x8f, 0x90, 0x29, 0x17, 0x1b, 0x44, 0xbb, 0x90, 0xb0, 0x1e, 0xd8, 0x91, 0x28, 0xa6, 0x4b, 0x89,
- 0xa0, 0x0a, 0x42, 0x6c, 0x50, 0x62, 0x48, 0x62, 0x03, 0xbb, 0xc6, 0x18, 0x10, 0x00, 0x00, 0xff,
- 0xff, 0xc0, 0x99, 0x61, 0x2b, 0xdf, 0x00, 0x00, 0x00,
+var file_proto_blog_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_proto_blog_proto_goTypes = []interface{}{
+ (*LatestRequest)(nil), // 0: blog.LatestRequest
+ (*LatestResponse)(nil), // 1: blog.LatestResponse
+ (*proto1.Post)(nil), // 2: posts.Post
+}
+var file_proto_blog_proto_depIdxs = []int32{
+ 2, // 0: blog.LatestResponse.latest:type_name -> posts.Post
+ 0, // 1: blog.Blog.Latest:input_type -> blog.LatestRequest
+ 1, // 2: blog.Blog.Latest:output_type -> blog.LatestResponse
+ 2, // [2:3] is the sub-list for method output_type
+ 1, // [1:2] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_proto_blog_proto_init() }
+func file_proto_blog_proto_init() {
+ if File_proto_blog_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_proto_blog_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*LatestRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_blog_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*LatestResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_proto_blog_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 2,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_proto_blog_proto_goTypes,
+ DependencyIndexes: file_proto_blog_proto_depIdxs,
+ MessageInfos: file_proto_blog_proto_msgTypes,
+ }.Build()
+ File_proto_blog_proto = out.File
+ file_proto_blog_proto_rawDesc = nil
+ file_proto_blog_proto_goTypes = nil
+ file_proto_blog_proto_depIdxs = nil
}
diff --git a/blog/proto/blog.pb.micro.go b/blog/proto/blog.pb.micro.go
index 8939448..8b2be42 100644
--- a/blog/proto/blog.pb.micro.go
+++ b/blog/proto/blog.pb.micro.go
@@ -6,7 +6,7 @@ package blog
import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
- _ "github.com/micro/services/blog/posts/proto"
+ _ "github.com/micro/services/posts/proto"
math "math"
)
diff --git a/blog/proto/blog.proto b/blog/proto/blog.proto
index 429ca78..56e2002 100644
--- a/blog/proto/blog.proto
+++ b/blog/proto/blog.proto
@@ -1,8 +1,9 @@
syntax = "proto3";
package blog;
+option go_package = "proto;blog";
-import "github.com/micro/services/blog/posts/proto/posts.proto";
+import "github.com/micro/services/posts/proto/posts.proto";
service Blog {
rpc Latest(LatestRequest) returns (LatestResponse) {}
diff --git a/blog/skip b/blog/skip
new file mode 100644
index 0000000..e69de29
diff --git a/blog/tags/proto/tags.pb.go b/blog/tags/proto/tags.pb.go
deleted file mode 100644
index 626ffe9..0000000
--- a/blog/tags/proto/tags.pb.go
+++ /dev/null
@@ -1,510 +0,0 @@
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// source: github.com/micro/services/blog/tags/proto/tags.proto
-
-package tags
-
-import (
- fmt "fmt"
- proto "github.com/golang/protobuf/proto"
- math "math"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
-
-type Tag struct {
- // Type is useful for namespacing and listing across resources,
- // ie. list tags for posts, customers etc.
- Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
- Slug string `protobuf:"bytes,2,opt,name=slug,proto3" json:"slug,omitempty"`
- Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
- Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
- Count int64 `protobuf:"varint,5,opt,name=count,proto3" json:"count,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *Tag) Reset() { *m = Tag{} }
-func (m *Tag) String() string { return proto.CompactTextString(m) }
-func (*Tag) ProtoMessage() {}
-func (*Tag) Descriptor() ([]byte, []int) {
- return fileDescriptor_fc76523216c4be8e, []int{0}
-}
-
-func (m *Tag) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_Tag.Unmarshal(m, b)
-}
-func (m *Tag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_Tag.Marshal(b, m, deterministic)
-}
-func (m *Tag) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Tag.Merge(m, src)
-}
-func (m *Tag) XXX_Size() int {
- return xxx_messageInfo_Tag.Size(m)
-}
-func (m *Tag) XXX_DiscardUnknown() {
- xxx_messageInfo_Tag.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Tag proto.InternalMessageInfo
-
-func (m *Tag) GetType() string {
- if m != nil {
- return m.Type
- }
- return ""
-}
-
-func (m *Tag) GetSlug() string {
- if m != nil {
- return m.Slug
- }
- return ""
-}
-
-func (m *Tag) GetTitle() string {
- if m != nil {
- return m.Title
- }
- return ""
-}
-
-func (m *Tag) GetDescription() string {
- if m != nil {
- return m.Description
- }
- return ""
-}
-
-func (m *Tag) GetCount() int64 {
- if m != nil {
- return m.Count
- }
- return 0
-}
-
-type AddRequest struct {
- ResourceID string `protobuf:"bytes,1,opt,name=resourceID,proto3" json:"resourceID,omitempty"`
- Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
- Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
- ResourceCreated int64 `protobuf:"varint,4,opt,name=resourceCreated,proto3" json:"resourceCreated,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AddRequest) Reset() { *m = AddRequest{} }
-func (m *AddRequest) String() string { return proto.CompactTextString(m) }
-func (*AddRequest) ProtoMessage() {}
-func (*AddRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_fc76523216c4be8e, []int{1}
-}
-
-func (m *AddRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_AddRequest.Unmarshal(m, b)
-}
-func (m *AddRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_AddRequest.Marshal(b, m, deterministic)
-}
-func (m *AddRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AddRequest.Merge(m, src)
-}
-func (m *AddRequest) XXX_Size() int {
- return xxx_messageInfo_AddRequest.Size(m)
-}
-func (m *AddRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_AddRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AddRequest proto.InternalMessageInfo
-
-func (m *AddRequest) GetResourceID() string {
- if m != nil {
- return m.ResourceID
- }
- return ""
-}
-
-func (m *AddRequest) GetType() string {
- if m != nil {
- return m.Type
- }
- return ""
-}
-
-func (m *AddRequest) GetTitle() string {
- if m != nil {
- return m.Title
- }
- return ""
-}
-
-func (m *AddRequest) GetResourceCreated() int64 {
- if m != nil {
- return m.ResourceCreated
- }
- return 0
-}
-
-type AddResponse struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *AddResponse) Reset() { *m = AddResponse{} }
-func (m *AddResponse) String() string { return proto.CompactTextString(m) }
-func (*AddResponse) ProtoMessage() {}
-func (*AddResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_fc76523216c4be8e, []int{2}
-}
-
-func (m *AddResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_AddResponse.Unmarshal(m, b)
-}
-func (m *AddResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_AddResponse.Marshal(b, m, deterministic)
-}
-func (m *AddResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_AddResponse.Merge(m, src)
-}
-func (m *AddResponse) XXX_Size() int {
- return xxx_messageInfo_AddResponse.Size(m)
-}
-func (m *AddResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_AddResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AddResponse proto.InternalMessageInfo
-
-type RemoveRequest struct {
- ResourceID string `protobuf:"bytes,1,opt,name=resourceID,proto3" json:"resourceID,omitempty"`
- Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
- Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *RemoveRequest) Reset() { *m = RemoveRequest{} }
-func (m *RemoveRequest) String() string { return proto.CompactTextString(m) }
-func (*RemoveRequest) ProtoMessage() {}
-func (*RemoveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_fc76523216c4be8e, []int{3}
-}
-
-func (m *RemoveRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_RemoveRequest.Unmarshal(m, b)
-}
-func (m *RemoveRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_RemoveRequest.Marshal(b, m, deterministic)
-}
-func (m *RemoveRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_RemoveRequest.Merge(m, src)
-}
-func (m *RemoveRequest) XXX_Size() int {
- return xxx_messageInfo_RemoveRequest.Size(m)
-}
-func (m *RemoveRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_RemoveRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_RemoveRequest proto.InternalMessageInfo
-
-func (m *RemoveRequest) GetResourceID() string {
- if m != nil {
- return m.ResourceID
- }
- return ""
-}
-
-func (m *RemoveRequest) GetType() string {
- if m != nil {
- return m.Type
- }
- return ""
-}
-
-func (m *RemoveRequest) GetTitle() string {
- if m != nil {
- return m.Title
- }
- return ""
-}
-
-type RemoveResponse struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *RemoveResponse) Reset() { *m = RemoveResponse{} }
-func (m *RemoveResponse) String() string { return proto.CompactTextString(m) }
-func (*RemoveResponse) ProtoMessage() {}
-func (*RemoveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_fc76523216c4be8e, []int{4}
-}
-
-func (m *RemoveResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_RemoveResponse.Unmarshal(m, b)
-}
-func (m *RemoveResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_RemoveResponse.Marshal(b, m, deterministic)
-}
-func (m *RemoveResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_RemoveResponse.Merge(m, src)
-}
-func (m *RemoveResponse) XXX_Size() int {
- return xxx_messageInfo_RemoveResponse.Size(m)
-}
-func (m *RemoveResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_RemoveResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_RemoveResponse proto.InternalMessageInfo
-
-type UpdateRequest struct {
- Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
- Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
- Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *UpdateRequest) Reset() { *m = UpdateRequest{} }
-func (m *UpdateRequest) String() string { return proto.CompactTextString(m) }
-func (*UpdateRequest) ProtoMessage() {}
-func (*UpdateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_fc76523216c4be8e, []int{5}
-}
-
-func (m *UpdateRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_UpdateRequest.Unmarshal(m, b)
-}
-func (m *UpdateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_UpdateRequest.Marshal(b, m, deterministic)
-}
-func (m *UpdateRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_UpdateRequest.Merge(m, src)
-}
-func (m *UpdateRequest) XXX_Size() int {
- return xxx_messageInfo_UpdateRequest.Size(m)
-}
-func (m *UpdateRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_UpdateRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_UpdateRequest proto.InternalMessageInfo
-
-func (m *UpdateRequest) GetType() string {
- if m != nil {
- return m.Type
- }
- return ""
-}
-
-func (m *UpdateRequest) GetTitle() string {
- if m != nil {
- return m.Title
- }
- return ""
-}
-
-func (m *UpdateRequest) GetDescription() string {
- if m != nil {
- return m.Description
- }
- return ""
-}
-
-type UpdateResponse struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *UpdateResponse) Reset() { *m = UpdateResponse{} }
-func (m *UpdateResponse) String() string { return proto.CompactTextString(m) }
-func (*UpdateResponse) ProtoMessage() {}
-func (*UpdateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_fc76523216c4be8e, []int{6}
-}
-
-func (m *UpdateResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_UpdateResponse.Unmarshal(m, b)
-}
-func (m *UpdateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_UpdateResponse.Marshal(b, m, deterministic)
-}
-func (m *UpdateResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_UpdateResponse.Merge(m, src)
-}
-func (m *UpdateResponse) XXX_Size() int {
- return xxx_messageInfo_UpdateResponse.Size(m)
-}
-func (m *UpdateResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_UpdateResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_UpdateResponse proto.InternalMessageInfo
-
-// ListRequest: list either by resource id or type.
-// Optionally filter by min or max count.
-type ListRequest struct {
- ResourceID string `protobuf:"bytes,1,opt,name=resourceID,proto3" json:"resourceID,omitempty"`
- Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
- MinCount int64 `protobuf:"varint,3,opt,name=minCount,proto3" json:"minCount,omitempty"`
- MaxCount int64 `protobuf:"varint,4,opt,name=maxCount,proto3" json:"maxCount,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *ListRequest) Reset() { *m = ListRequest{} }
-func (m *ListRequest) String() string { return proto.CompactTextString(m) }
-func (*ListRequest) ProtoMessage() {}
-func (*ListRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_fc76523216c4be8e, []int{7}
-}
-
-func (m *ListRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ListRequest.Unmarshal(m, b)
-}
-func (m *ListRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ListRequest.Marshal(b, m, deterministic)
-}
-func (m *ListRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ListRequest.Merge(m, src)
-}
-func (m *ListRequest) XXX_Size() int {
- return xxx_messageInfo_ListRequest.Size(m)
-}
-func (m *ListRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_ListRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ListRequest proto.InternalMessageInfo
-
-func (m *ListRequest) GetResourceID() string {
- if m != nil {
- return m.ResourceID
- }
- return ""
-}
-
-func (m *ListRequest) GetType() string {
- if m != nil {
- return m.Type
- }
- return ""
-}
-
-func (m *ListRequest) GetMinCount() int64 {
- if m != nil {
- return m.MinCount
- }
- return 0
-}
-
-func (m *ListRequest) GetMaxCount() int64 {
- if m != nil {
- return m.MaxCount
- }
- return 0
-}
-
-type ListResponse struct {
- Tags []*Tag `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *ListResponse) Reset() { *m = ListResponse{} }
-func (m *ListResponse) String() string { return proto.CompactTextString(m) }
-func (*ListResponse) ProtoMessage() {}
-func (*ListResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_fc76523216c4be8e, []int{8}
-}
-
-func (m *ListResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ListResponse.Unmarshal(m, b)
-}
-func (m *ListResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ListResponse.Marshal(b, m, deterministic)
-}
-func (m *ListResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ListResponse.Merge(m, src)
-}
-func (m *ListResponse) XXX_Size() int {
- return xxx_messageInfo_ListResponse.Size(m)
-}
-func (m *ListResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_ListResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ListResponse proto.InternalMessageInfo
-
-func (m *ListResponse) GetTags() []*Tag {
- if m != nil {
- return m.Tags
- }
- return nil
-}
-
-func init() {
- proto.RegisterType((*Tag)(nil), "tags.Tag")
- proto.RegisterType((*AddRequest)(nil), "tags.AddRequest")
- proto.RegisterType((*AddResponse)(nil), "tags.AddResponse")
- proto.RegisterType((*RemoveRequest)(nil), "tags.RemoveRequest")
- proto.RegisterType((*RemoveResponse)(nil), "tags.RemoveResponse")
- proto.RegisterType((*UpdateRequest)(nil), "tags.UpdateRequest")
- proto.RegisterType((*UpdateResponse)(nil), "tags.UpdateResponse")
- proto.RegisterType((*ListRequest)(nil), "tags.ListRequest")
- proto.RegisterType((*ListResponse)(nil), "tags.ListResponse")
-}
-
-func init() {
- proto.RegisterFile("github.com/micro/services/blog/tags/proto/tags.proto", fileDescriptor_fc76523216c4be8e)
-}
-
-var fileDescriptor_fc76523216c4be8e = []byte{
- // 406 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x53, 0x41, 0x4f, 0xab, 0x40,
- 0x10, 0x2e, 0x5d, 0xda, 0xbc, 0x0e, 0xaf, 0xef, 0xf5, 0xed, 0xeb, 0x81, 0x90, 0x68, 0x08, 0x27,
- 0x0e, 0x5a, 0x92, 0xaa, 0x3f, 0xa0, 0xa9, 0x17, 0x13, 0x4f, 0xa4, 0x1e, 0x8c, 0x27, 0x0a, 0x1b,
- 0xdc, 0xa4, 0xb0, 0xc8, 0x2e, 0x8d, 0x8d, 0x17, 0xff, 0xa3, 0x7f, 0xc8, 0xb0, 0x0b, 0xb8, 0xad,
- 0x8d, 0x17, 0xbd, 0xcd, 0x7c, 0xc3, 0xcc, 0xf7, 0xed, 0x37, 0x03, 0x5c, 0xa6, 0x54, 0x3c, 0x56,
- 0xeb, 0x59, 0xcc, 0xb2, 0x20, 0xa3, 0x71, 0xc9, 0x02, 0x4e, 0xca, 0x2d, 0x8d, 0x09, 0x0f, 0xd6,
- 0x1b, 0x96, 0x06, 0x22, 0x4a, 0x79, 0x50, 0x94, 0x4c, 0x30, 0x19, 0xce, 0x64, 0x88, 0xcd, 0x3a,
- 0xf6, 0x5e, 0x00, 0xad, 0xa2, 0x14, 0x63, 0x30, 0xc5, 0xae, 0x20, 0xb6, 0xe1, 0x1a, 0xfe, 0x28,
- 0x94, 0x71, 0x8d, 0xf1, 0x4d, 0x95, 0xda, 0x7d, 0x85, 0xd5, 0x31, 0x9e, 0xc2, 0x40, 0x50, 0xb1,
- 0x21, 0x36, 0x92, 0xa0, 0x4a, 0xb0, 0x0b, 0x56, 0x42, 0x78, 0x5c, 0xd2, 0x42, 0x50, 0x96, 0xdb,
- 0xa6, 0xac, 0xe9, 0x50, 0xdd, 0x17, 0xb3, 0x2a, 0x17, 0xf6, 0xc0, 0x35, 0x7c, 0x14, 0xaa, 0xc4,
- 0x7b, 0x35, 0x00, 0x16, 0x49, 0x12, 0x92, 0xa7, 0x8a, 0x70, 0x81, 0x4f, 0x01, 0x4a, 0xc2, 0x59,
- 0x55, 0xc6, 0xe4, 0xe6, 0xba, 0x91, 0xa2, 0x21, 0x9d, 0xc8, 0xbe, 0x26, 0xf2, 0xb8, 0x20, 0x1f,
- 0xfe, 0xb6, 0x7d, 0xcb, 0x92, 0x44, 0x82, 0x24, 0x52, 0x14, 0x0a, 0x0f, 0x61, 0x6f, 0x0c, 0x96,
- 0x54, 0xc0, 0x0b, 0x96, 0x73, 0xe2, 0xdd, 0xc3, 0x38, 0x24, 0x19, 0xdb, 0x92, 0x1f, 0xd7, 0xe4,
- 0x4d, 0xe0, 0x4f, 0x3b, 0xba, 0x21, 0x7b, 0x80, 0xf1, 0x5d, 0x91, 0x44, 0xa2, 0x23, 0x3b, 0xb6,
- 0x85, 0x6e, 0x58, 0xff, 0x0b, 0xc7, 0xd1, 0x27, 0xc7, 0x6b, 0xba, 0x76, 0x78, 0x43, 0xb7, 0x03,
- 0xeb, 0x96, 0x72, 0xf1, 0x9d, 0x97, 0x39, 0xf0, 0x2b, 0xa3, 0xf9, 0x52, 0x6e, 0x12, 0x49, 0x43,
- 0xbb, 0x5c, 0xd6, 0xa2, 0x67, 0x55, 0x33, 0x9b, 0x5a, 0x93, 0x7b, 0xe7, 0xf0, 0x5b, 0x51, 0x2b,
- 0x29, 0xf8, 0x04, 0xe4, 0xf5, 0xd9, 0x86, 0x8b, 0x7c, 0x6b, 0x3e, 0x9a, 0xc9, 0xb3, 0x5c, 0x45,
- 0x69, 0x28, 0xe1, 0xf9, 0x9b, 0x01, 0xe6, 0x2a, 0x4a, 0x39, 0x3e, 0x03, 0xb4, 0x48, 0x12, 0x3c,
- 0x51, 0x1f, 0x7c, 0x9c, 0x8a, 0xf3, 0x4f, 0x43, 0x9a, 0xe7, 0xf5, 0xf0, 0x15, 0x0c, 0x95, 0xc3,
- 0xf8, 0xbf, 0x2a, 0xef, 0xad, 0xd2, 0x99, 0xee, 0x83, 0x5d, 0x5b, 0x00, 0x66, 0x2d, 0x0e, 0x37,
- 0x33, 0x35, 0x8f, 0x1c, 0xac, 0x43, 0x3a, 0x8f, 0xb2, 0xb6, 0xe5, 0xd9, 0xdb, 0x62, 0xcb, 0x73,
- 0xe0, 0x7e, 0x6f, 0x3d, 0x94, 0xff, 0xdd, 0xc5, 0x7b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa3, 0xb1,
- 0x3f, 0xea, 0xaf, 0x03, 0x00, 0x00,
-}
diff --git a/chat/Makefile b/chat/Makefile
new file mode 100644
index 0000000..a0f820f
--- /dev/null
+++ b/chat/Makefile
@@ -0,0 +1,27 @@
+
+GOPATH:=$(shell go env GOPATH)
+.PHONY: init
+init:
+ go get -u github.com/golang/protobuf/proto
+ go get -u github.com/golang/protobuf/protoc-gen-go
+ go get github.com/micro/micro/v3/cmd/protoc-gen-micro
+.PHONY: proto
+proto:
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/chat.proto
+
+.PHONY: docs
+docs:
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/chat.proto
+ @redoc-cli bundle api-chat.json
+
+.PHONY: build
+build:
+ go build -o chat *.go
+
+.PHONY: test
+test:
+ go test -v ./... -cover
+
+.PHONY: docker
+docker:
+ docker build . -t chat:latest
diff --git a/chat/README.md b/chat/README.md
index 7410db8..ab67e6c 100644
--- a/chat/README.md
+++ b/chat/README.md
@@ -1,14 +1,25 @@
-# Chat Service
-
The chat service is an example Micro service which leverages bidirectional streaming, the store and events to build a chat backend. There is both a server and client which can be run together to demonstrate the application (see client/main.go for more instructions on running the service).
+# Chat Service
+
The service is documented inline and is designed to act as a reference for the events package.
-### Calling the service
+## Create a chat
-You can call the service via the CLI:
+### cURL
+
+```bash
+> curl 'https://api.m3o.com/chat/New' \
+ -H 'micro-namespace: $yourNamespace' \
+ -H 'authorization: Bearer $yourToken' \
+ -d '{"user_ids":["JohnBarry"]}';
+{
+ "chat_id": "3c9ea66c-d516-45d4-abe8-082089e18b27"
+}
+```
+
+### CLI
-Create a chat:
```bash
> micro chat new --user_ids=JohnBarry
{
@@ -16,13 +27,49 @@ Create a chat:
}
```
-Send a message to the chat:
+## Send a message to the chat
+
+### cURL
+
+```bash
+> curl 'https://api.m3o.com/chat/Send' \
+ -H 'micro-namespace: $yourNamespace' \
+ -H 'authorization: Bearer $yourToken' \
+ -d '{"user_id": "John", "subject": "Hello", "text": "Hey Barry"}';
+{}
+```
+
+### CLI
+
```bash
> micro chat send --chat_id=bed4f0f0-da12-46d2-90d2-17ae1714a214 --user_id=John --subject=Hello --text='Hey Barry'
{}
```
-View the chat history
+## View the chat history
+
+### cURL
+
+```bash
+> curl 'https://api.m3o.com/chat/Send' \
+ -H 'micro-namespace: $yourNamespace' \
+ -H 'authorization: Bearer $yourToken' \
+ -d '{"chat_id": "bed4f0f0-da12-46d2-90d2-17ae1714a214"}';
+{
+ "messages": [
+ {
+ "id": "a61284a8-f471-4734-9192-640d89762e98",
+ "client_id": "6ba0d2a6-96fa-47d8-8f6f-7f75b4cc8b3e",
+ "chat_id": "bed4f0f0-da12-46d2-90d2-17ae1714a214",
+ "user_id": "John",
+ "subject": "Hello",
+ "text": "Hey Barry"
+ }
+ ]
+}
+```
+
+### CLI
```bash
> micro chat history --chat_id=bed4f0f0-da12-46d2-90d2-17ae1714a214
{
diff --git a/chat/proto/chat.pb.go b/chat/proto/chat.pb.go
index 50d0379..2741d98 100644
--- a/chat/proto/chat.pb.go
+++ b/chat/proto/chat.pb.go
@@ -1,101 +1,122 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
-// source: github.com/micro/services/chat/proto/chat.proto
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.6.1
+// source: proto/chat.proto
package chat
import (
- fmt "fmt"
proto "github.com/golang/protobuf/proto"
- math "math"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
)
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
+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)
+)
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
// NewRequest contains the infromation needed to create a new chat
type NewRequest struct {
- UserIds []string `protobuf:"bytes,1,rep,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ UserIds []string `protobuf:"bytes,1,rep,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"`
}
-func (m *NewRequest) Reset() { *m = NewRequest{} }
-func (m *NewRequest) String() string { return proto.CompactTextString(m) }
-func (*NewRequest) ProtoMessage() {}
+func (x *NewRequest) Reset() {
+ *x = NewRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_chat_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NewRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NewRequest) ProtoMessage() {}
+
+func (x *NewRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_chat_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 NewRequest.ProtoReflect.Descriptor instead.
func (*NewRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_4935707190cdb38c, []int{0}
+ return file_proto_chat_proto_rawDescGZIP(), []int{0}
}
-func (m *NewRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NewRequest.Unmarshal(m, b)
-}
-func (m *NewRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NewRequest.Marshal(b, m, deterministic)
-}
-func (m *NewRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NewRequest.Merge(m, src)
-}
-func (m *NewRequest) XXX_Size() int {
- return xxx_messageInfo_NewRequest.Size(m)
-}
-func (m *NewRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NewRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NewRequest proto.InternalMessageInfo
-
-func (m *NewRequest) GetUserIds() []string {
- if m != nil {
- return m.UserIds
+func (x *NewRequest) GetUserIds() []string {
+ if x != nil {
+ return x.UserIds
}
return nil
}
// NewResponse contains the chat id for the users
type NewResponse struct {
- ChatId string `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ChatId string `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"`
}
-func (m *NewResponse) Reset() { *m = NewResponse{} }
-func (m *NewResponse) String() string { return proto.CompactTextString(m) }
-func (*NewResponse) ProtoMessage() {}
+func (x *NewResponse) Reset() {
+ *x = NewResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_chat_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NewResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NewResponse) ProtoMessage() {}
+
+func (x *NewResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_chat_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 NewResponse.ProtoReflect.Descriptor instead.
func (*NewResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_4935707190cdb38c, []int{1}
+ return file_proto_chat_proto_rawDescGZIP(), []int{1}
}
-func (m *NewResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NewResponse.Unmarshal(m, b)
-}
-func (m *NewResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NewResponse.Marshal(b, m, deterministic)
-}
-func (m *NewResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NewResponse.Merge(m, src)
-}
-func (m *NewResponse) XXX_Size() int {
- return xxx_messageInfo_NewResponse.Size(m)
-}
-func (m *NewResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_NewResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NewResponse proto.InternalMessageInfo
-
-func (m *NewResponse) GetChatId() string {
- if m != nil {
- return m.ChatId
+func (x *NewResponse) GetChatId() string {
+ if x != nil {
+ return x.ChatId
}
return ""
}
@@ -104,86 +125,106 @@ func (m *NewResponse) GetChatId() string {
// historical messages, however in a real life application we'd introduce some form of pagination
// here, only loading the older messages when required.
type HistoryRequest struct {
- ChatId string `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ChatId string `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"`
}
-func (m *HistoryRequest) Reset() { *m = HistoryRequest{} }
-func (m *HistoryRequest) String() string { return proto.CompactTextString(m) }
-func (*HistoryRequest) ProtoMessage() {}
+func (x *HistoryRequest) Reset() {
+ *x = HistoryRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_chat_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HistoryRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HistoryRequest) ProtoMessage() {}
+
+func (x *HistoryRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_chat_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 HistoryRequest.ProtoReflect.Descriptor instead.
func (*HistoryRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_4935707190cdb38c, []int{2}
+ return file_proto_chat_proto_rawDescGZIP(), []int{2}
}
-func (m *HistoryRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_HistoryRequest.Unmarshal(m, b)
-}
-func (m *HistoryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_HistoryRequest.Marshal(b, m, deterministic)
-}
-func (m *HistoryRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_HistoryRequest.Merge(m, src)
-}
-func (m *HistoryRequest) XXX_Size() int {
- return xxx_messageInfo_HistoryRequest.Size(m)
-}
-func (m *HistoryRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_HistoryRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_HistoryRequest proto.InternalMessageInfo
-
-func (m *HistoryRequest) GetChatId() string {
- if m != nil {
- return m.ChatId
+func (x *HistoryRequest) GetChatId() string {
+ if x != nil {
+ return x.ChatId
}
return ""
}
// HistoryResponse contains the historical messages in a chat
type HistoryResponse struct {
- Messages []*Message `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Messages []*Message `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"`
}
-func (m *HistoryResponse) Reset() { *m = HistoryResponse{} }
-func (m *HistoryResponse) String() string { return proto.CompactTextString(m) }
-func (*HistoryResponse) ProtoMessage() {}
+func (x *HistoryResponse) Reset() {
+ *x = HistoryResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_chat_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HistoryResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HistoryResponse) ProtoMessage() {}
+
+func (x *HistoryResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_chat_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 HistoryResponse.ProtoReflect.Descriptor instead.
func (*HistoryResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_4935707190cdb38c, []int{3}
+ return file_proto_chat_proto_rawDescGZIP(), []int{3}
}
-func (m *HistoryResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_HistoryResponse.Unmarshal(m, b)
-}
-func (m *HistoryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_HistoryResponse.Marshal(b, m, deterministic)
-}
-func (m *HistoryResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_HistoryResponse.Merge(m, src)
-}
-func (m *HistoryResponse) XXX_Size() int {
- return xxx_messageInfo_HistoryResponse.Size(m)
-}
-func (m *HistoryResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_HistoryResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_HistoryResponse proto.InternalMessageInfo
-
-func (m *HistoryResponse) GetMessages() []*Message {
- if m != nil {
- return m.Messages
+func (x *HistoryResponse) GetMessages() []*Message {
+ if x != nil {
+ return x.Messages
}
return nil
}
// SendRequest contains a single message to send to a chat
type SendRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
// a client side id, should be validated by the server to make the request retry safe
ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"`
// id of the chat the message is being sent to / from
@@ -193,106 +234,121 @@ type SendRequest struct {
// subject of the message
Subject string `protobuf:"bytes,4,opt,name=subject,proto3" json:"subject,omitempty"`
// text of the message
- Text string `protobuf:"bytes,5,opt,name=text,proto3" json:"text,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ Text string `protobuf:"bytes,5,opt,name=text,proto3" json:"text,omitempty"`
}
-func (m *SendRequest) Reset() { *m = SendRequest{} }
-func (m *SendRequest) String() string { return proto.CompactTextString(m) }
-func (*SendRequest) ProtoMessage() {}
+func (x *SendRequest) Reset() {
+ *x = SendRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_chat_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SendRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SendRequest) ProtoMessage() {}
+
+func (x *SendRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_chat_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 SendRequest.ProtoReflect.Descriptor instead.
func (*SendRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_4935707190cdb38c, []int{4}
+ return file_proto_chat_proto_rawDescGZIP(), []int{4}
}
-func (m *SendRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_SendRequest.Unmarshal(m, b)
-}
-func (m *SendRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_SendRequest.Marshal(b, m, deterministic)
-}
-func (m *SendRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_SendRequest.Merge(m, src)
-}
-func (m *SendRequest) XXX_Size() int {
- return xxx_messageInfo_SendRequest.Size(m)
-}
-func (m *SendRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_SendRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SendRequest proto.InternalMessageInfo
-
-func (m *SendRequest) GetClientId() string {
- if m != nil {
- return m.ClientId
+func (x *SendRequest) GetClientId() string {
+ if x != nil {
+ return x.ClientId
}
return ""
}
-func (m *SendRequest) GetChatId() string {
- if m != nil {
- return m.ChatId
+func (x *SendRequest) GetChatId() string {
+ if x != nil {
+ return x.ChatId
}
return ""
}
-func (m *SendRequest) GetUserId() string {
- if m != nil {
- return m.UserId
+func (x *SendRequest) GetUserId() string {
+ if x != nil {
+ return x.UserId
}
return ""
}
-func (m *SendRequest) GetSubject() string {
- if m != nil {
- return m.Subject
+func (x *SendRequest) GetSubject() string {
+ if x != nil {
+ return x.Subject
}
return ""
}
-func (m *SendRequest) GetText() string {
- if m != nil {
- return m.Text
+func (x *SendRequest) GetText() string {
+ if x != nil {
+ return x.Text
}
return ""
}
// SendResponse is a blank message returned when a message is successfully created
type SendResponse struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
}
-func (m *SendResponse) Reset() { *m = SendResponse{} }
-func (m *SendResponse) String() string { return proto.CompactTextString(m) }
-func (*SendResponse) ProtoMessage() {}
+func (x *SendResponse) Reset() {
+ *x = SendResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_chat_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SendResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SendResponse) ProtoMessage() {}
+
+func (x *SendResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_chat_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 SendResponse.ProtoReflect.Descriptor instead.
func (*SendResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_4935707190cdb38c, []int{5}
+ return file_proto_chat_proto_rawDescGZIP(), []int{5}
}
-func (m *SendResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_SendResponse.Unmarshal(m, b)
-}
-func (m *SendResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_SendResponse.Marshal(b, m, deterministic)
-}
-func (m *SendResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_SendResponse.Merge(m, src)
-}
-func (m *SendResponse) XXX_Size() int {
- return xxx_messageInfo_SendResponse.Size(m)
-}
-func (m *SendResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_SendResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SendResponse proto.InternalMessageInfo
-
// Message sent to a chat
type Message struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
// id of the message, allocated by the server
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
// a client side id, should be validated by the server to make the request retry safe
@@ -306,126 +362,289 @@ type Message struct {
// subject of the message
Subject string `protobuf:"bytes,6,opt,name=subject,proto3" json:"subject,omitempty"`
// text of the message
- Text string `protobuf:"bytes,7,opt,name=text,proto3" json:"text,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ Text string `protobuf:"bytes,7,opt,name=text,proto3" json:"text,omitempty"`
}
-func (m *Message) Reset() { *m = Message{} }
-func (m *Message) String() string { return proto.CompactTextString(m) }
-func (*Message) ProtoMessage() {}
+func (x *Message) Reset() {
+ *x = Message{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_chat_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Message) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Message) ProtoMessage() {}
+
+func (x *Message) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_chat_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 Message.ProtoReflect.Descriptor instead.
func (*Message) Descriptor() ([]byte, []int) {
- return fileDescriptor_4935707190cdb38c, []int{6}
+ return file_proto_chat_proto_rawDescGZIP(), []int{6}
}
-func (m *Message) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_Message.Unmarshal(m, b)
-}
-func (m *Message) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_Message.Marshal(b, m, deterministic)
-}
-func (m *Message) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Message.Merge(m, src)
-}
-func (m *Message) XXX_Size() int {
- return xxx_messageInfo_Message.Size(m)
-}
-func (m *Message) XXX_DiscardUnknown() {
- xxx_messageInfo_Message.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Message proto.InternalMessageInfo
-
-func (m *Message) GetId() string {
- if m != nil {
- return m.Id
+func (x *Message) GetId() string {
+ if x != nil {
+ return x.Id
}
return ""
}
-func (m *Message) GetClientId() string {
- if m != nil {
- return m.ClientId
+func (x *Message) GetClientId() string {
+ if x != nil {
+ return x.ClientId
}
return ""
}
-func (m *Message) GetChatId() string {
- if m != nil {
- return m.ChatId
+func (x *Message) GetChatId() string {
+ if x != nil {
+ return x.ChatId
}
return ""
}
-func (m *Message) GetUserId() string {
- if m != nil {
- return m.UserId
+func (x *Message) GetUserId() string {
+ if x != nil {
+ return x.UserId
}
return ""
}
-func (m *Message) GetSentAt() int64 {
- if m != nil {
- return m.SentAt
+func (x *Message) GetSentAt() int64 {
+ if x != nil {
+ return x.SentAt
}
return 0
}
-func (m *Message) GetSubject() string {
- if m != nil {
- return m.Subject
+func (x *Message) GetSubject() string {
+ if x != nil {
+ return x.Subject
}
return ""
}
-func (m *Message) GetText() string {
- if m != nil {
- return m.Text
+func (x *Message) GetText() string {
+ if x != nil {
+ return x.Text
}
return ""
}
-func init() {
- proto.RegisterType((*NewRequest)(nil), "chat.NewRequest")
- proto.RegisterType((*NewResponse)(nil), "chat.NewResponse")
- proto.RegisterType((*HistoryRequest)(nil), "chat.HistoryRequest")
- proto.RegisterType((*HistoryResponse)(nil), "chat.HistoryResponse")
- proto.RegisterType((*SendRequest)(nil), "chat.SendRequest")
- proto.RegisterType((*SendResponse)(nil), "chat.SendResponse")
- proto.RegisterType((*Message)(nil), "chat.Message")
+var File_proto_chat_proto protoreflect.FileDescriptor
+
+var file_proto_chat_proto_rawDesc = []byte{
+ 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x12, 0x04, 0x63, 0x68, 0x61, 0x74, 0x22, 0x27, 0x0a, 0x0a, 0x4e, 0x65, 0x77, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69,
+ 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64,
+ 0x73, 0x22, 0x26, 0x0a, 0x0b, 0x4e, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x17, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x22, 0x29, 0x0a, 0x0e, 0x48, 0x69, 0x73,
+ 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x63,
+ 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x68,
+ 0x61, 0x74, 0x49, 0x64, 0x22, 0x3c, 0x0a, 0x0f, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61,
+ 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x63, 0x68, 0x61, 0x74,
+ 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+ 0x65, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12,
+ 0x17, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72,
+ 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
+ 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74,
+ 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22,
+ 0x0e, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0xaf, 0x01, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63,
+ 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+ 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74,
+ 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49,
+ 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65,
+ 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x65, 0x6e,
+ 0x74, 0x41, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x06,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a,
+ 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78,
+ 0x74, 0x32, 0xc6, 0x01, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x2a, 0x0a, 0x03, 0x4e, 0x65,
+ 0x77, 0x12, 0x10, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x4e, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x4e, 0x65, 0x77, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
+ 0x79, 0x12, 0x14, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x48,
+ 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d,
+ 0x0a, 0x04, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x11, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x53, 0x65,
+ 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x63, 0x68, 0x61, 0x74,
+ 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a,
+ 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x0d, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e,
+ 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x0d, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x4d,
+ 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x0c, 0x5a, 0x0a, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x3b, 0x63, 0x68, 0x61, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
-func init() {
- proto.RegisterFile("github.com/micro/services/chat/proto/chat.proto", fileDescriptor_4935707190cdb38c)
+var (
+ file_proto_chat_proto_rawDescOnce sync.Once
+ file_proto_chat_proto_rawDescData = file_proto_chat_proto_rawDesc
+)
+
+func file_proto_chat_proto_rawDescGZIP() []byte {
+ file_proto_chat_proto_rawDescOnce.Do(func() {
+ file_proto_chat_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_chat_proto_rawDescData)
+ })
+ return file_proto_chat_proto_rawDescData
}
-var fileDescriptor_4935707190cdb38c = []byte{
- // 405 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xcf, 0x6e, 0xda, 0x40,
- 0x10, 0xc6, 0xb5, 0xb6, 0xeb, 0x85, 0xa1, 0xa5, 0xed, 0xaa, 0x15, 0xae, 0x7b, 0x41, 0x3e, 0xb4,
- 0x50, 0x54, 0x5c, 0x51, 0x29, 0x97, 0xe4, 0x92, 0x70, 0x09, 0x87, 0x70, 0x70, 0x6e, 0xb9, 0x20,
- 0x63, 0xaf, 0x60, 0xa3, 0x60, 0x13, 0xef, 0x3a, 0x24, 0xaf, 0x90, 0x97, 0xc9, 0x5b, 0xe4, 0xb9,
- 0xa2, 0xfd, 0x03, 0xd8, 0x51, 0x90, 0x72, 0x9b, 0xf9, 0x66, 0x3c, 0xfb, 0xfb, 0x76, 0xd6, 0x10,
- 0x2e, 0x98, 0x58, 0x96, 0xf3, 0x61, 0x92, 0xaf, 0xc2, 0x15, 0x4b, 0x8a, 0x3c, 0xe4, 0xb4, 0xb8,
- 0x63, 0x09, 0xe5, 0x61, 0xb2, 0x8c, 0x45, 0xb8, 0x2e, 0x72, 0x91, 0xab, 0x70, 0xa8, 0x42, 0xe2,
- 0xc8, 0x38, 0xf8, 0x0d, 0x30, 0xa5, 0x9b, 0x88, 0xde, 0x96, 0x94, 0x0b, 0xf2, 0x03, 0x1a, 0x25,
- 0xa7, 0xc5, 0x8c, 0xa5, 0xdc, 0x43, 0x5d, 0xbb, 0xd7, 0x8c, 0xb0, 0xcc, 0x27, 0x29, 0x0f, 0x7e,
- 0x41, 0x4b, 0x35, 0xf2, 0x75, 0x9e, 0x71, 0x4a, 0x3a, 0x80, 0xe5, 0xf7, 0x33, 0x96, 0x7a, 0xa8,
- 0x8b, 0x7a, 0xcd, 0xc8, 0x95, 0xe9, 0x24, 0x0d, 0xfa, 0xd0, 0x3e, 0x67, 0x5c, 0xe4, 0xc5, 0xc3,
- 0x76, 0xe8, 0xc1, 0xd6, 0x13, 0xf8, 0xbc, 0x6b, 0x35, 0x63, 0xfb, 0xd0, 0x58, 0x51, 0xce, 0xe3,
- 0x05, 0xd5, 0x00, 0xad, 0xd1, 0xa7, 0xa1, 0x62, 0xbe, 0xd0, 0x6a, 0xb4, 0x2b, 0x07, 0x8f, 0x08,
- 0x5a, 0x97, 0x34, 0x4b, 0xb7, 0xc7, 0xfc, 0x84, 0x66, 0x72, 0xc3, 0x68, 0x56, 0x39, 0xa8, 0xa1,
- 0x85, 0x49, 0x5a, 0x65, 0xb0, 0xaa, 0x0c, 0xb2, 0x60, 0x1c, 0x7b, 0xb6, 0x2e, 0x68, 0xc3, 0xc4,
- 0x03, 0xcc, 0xcb, 0xf9, 0x35, 0x4d, 0x84, 0xe7, 0xa8, 0xc2, 0x36, 0x25, 0x04, 0x1c, 0x41, 0xef,
- 0x85, 0xf7, 0x41, 0xc9, 0x2a, 0x0e, 0xda, 0xf0, 0x51, 0xb3, 0x68, 0x1f, 0xc1, 0x13, 0x02, 0x6c,
- 0x90, 0x49, 0x1b, 0xac, 0x1d, 0x91, 0xc5, 0xd2, 0x3a, 0xa8, 0x75, 0x18, 0xd4, 0x3e, 0x04, 0xea,
- 0xd4, 0x40, 0x3b, 0x80, 0xb9, 0x1c, 0x16, 0x6b, 0x22, 0x3b, 0x72, 0x65, 0x7a, 0x2a, 0xaa, 0x0e,
- 0xdc, 0xb7, 0x1d, 0xe0, 0xbd, 0x83, 0xd1, 0x33, 0x02, 0x67, 0xbc, 0x8c, 0x05, 0xf9, 0x03, 0xf6,
- 0x94, 0x6e, 0xc8, 0x17, 0x7d, 0xef, 0xfb, 0xc7, 0xe1, 0x7f, 0xad, 0x28, 0x66, 0x5d, 0x47, 0x80,
- 0xcd, 0x06, 0xc9, 0x37, 0x5d, 0xad, 0xef, 0xde, 0xff, 0xfe, 0x4a, 0x35, 0xdf, 0xfd, 0x05, 0x47,
- 0x5e, 0x17, 0x31, 0x23, 0x2b, 0x6b, 0xf4, 0x49, 0x55, 0x32, 0xed, 0x03, 0xc0, 0xe3, 0x3c, 0xcb,
- 0x24, 0x7a, 0xfd, 0x39, 0xf8, 0xf5, 0xb4, 0x87, 0xfe, 0xa1, 0xb3, 0xc1, 0x55, 0xff, 0x3d, 0xbf,
- 0xc2, 0xb1, 0x0c, 0xe7, 0xae, 0x8a, 0xff, 0xbf, 0x04, 0x00, 0x00, 0xff, 0xff, 0x38, 0x55, 0x82,
- 0x43, 0x3e, 0x03, 0x00, 0x00,
+var file_proto_chat_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
+var file_proto_chat_proto_goTypes = []interface{}{
+ (*NewRequest)(nil), // 0: chat.NewRequest
+ (*NewResponse)(nil), // 1: chat.NewResponse
+ (*HistoryRequest)(nil), // 2: chat.HistoryRequest
+ (*HistoryResponse)(nil), // 3: chat.HistoryResponse
+ (*SendRequest)(nil), // 4: chat.SendRequest
+ (*SendResponse)(nil), // 5: chat.SendResponse
+ (*Message)(nil), // 6: chat.Message
+}
+var file_proto_chat_proto_depIdxs = []int32{
+ 6, // 0: chat.HistoryResponse.messages:type_name -> chat.Message
+ 0, // 1: chat.Chat.New:input_type -> chat.NewRequest
+ 2, // 2: chat.Chat.History:input_type -> chat.HistoryRequest
+ 4, // 3: chat.Chat.Send:input_type -> chat.SendRequest
+ 6, // 4: chat.Chat.Connect:input_type -> chat.Message
+ 1, // 5: chat.Chat.New:output_type -> chat.NewResponse
+ 3, // 6: chat.Chat.History:output_type -> chat.HistoryResponse
+ 5, // 7: chat.Chat.Send:output_type -> chat.SendResponse
+ 6, // 8: chat.Chat.Connect:output_type -> chat.Message
+ 5, // [5:9] is the sub-list for method output_type
+ 1, // [1:5] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_proto_chat_proto_init() }
+func file_proto_chat_proto_init() {
+ if File_proto_chat_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_proto_chat_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NewRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_chat_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NewResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_chat_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HistoryRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_chat_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HistoryResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_chat_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SendRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_chat_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SendResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_chat_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Message); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_proto_chat_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 7,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_proto_chat_proto_goTypes,
+ DependencyIndexes: file_proto_chat_proto_depIdxs,
+ MessageInfos: file_proto_chat_proto_msgTypes,
+ }.Build()
+ File_proto_chat_proto = out.File
+ file_proto_chat_proto_rawDesc = nil
+ file_proto_chat_proto_goTypes = nil
+ file_proto_chat_proto_depIdxs = nil
}
diff --git a/chat/proto/chat.pb.micro.go b/chat/proto/chat.pb.micro.go
index 7f0c7fa..1d26601 100644
--- a/chat/proto/chat.pb.micro.go
+++ b/chat/proto/chat.pb.micro.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-micro. DO NOT EDIT.
-// source: github.com/micro/services/chat/proto/chat.proto
+// source: proto/chat.proto
package chat
diff --git a/chat/proto/chat.proto b/chat/proto/chat.proto
index 991608d..da9ef3a 100644
--- a/chat/proto/chat.proto
+++ b/chat/proto/chat.proto
@@ -1,7 +1,7 @@
syntax = "proto3";
package chat;
-option go_package = "github.com/micro/services/chat/proto;chat";
+option go_package = "proto;chat";
service Chat {
// New creates a chat for a group of users. The RPC is idempotent so if it's called multiple times
diff --git a/cmd/docgen/main.go b/cmd/docgen/main.go
new file mode 100644
index 0000000..dc13eaa
--- /dev/null
+++ b/cmd/docgen/main.go
@@ -0,0 +1,305 @@
+package main
+
+import (
+ "encoding/json"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "log"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strings"
+ "text/template"
+
+ "github.com/getkin/kin-openapi/openapi3"
+ "github.com/stoewer/go-strcase"
+)
+
+const postContentPath = "docs/hugo-tania/site/content/post"
+
+func main() {
+ files, err := ioutil.ReadDir(os.Args[1])
+ if err != nil {
+ log.Fatal(err)
+ }
+ workDir, _ := os.Getwd()
+
+ docPath := filepath.Join(workDir, "docs")
+ err = ioutil.WriteFile(filepath.Join(docPath, "CNAME"), []byte("services.m3o.com"), 0777)
+ if err != nil {
+ fmt.Printf("Failed to CNAME")
+ os.Exit(1)
+ }
+
+ for _, f := range files {
+ if f.IsDir() && !strings.HasPrefix(f.Name(), ".") {
+ serviceDir := filepath.Join(workDir, f.Name())
+ serviceFiles, err := ioutil.ReadDir(serviceDir)
+ if err != nil {
+ fmt.Println("Failed to read service dir", err)
+ os.Exit(1)
+ }
+ skip := false
+ for _, serviceFile := range serviceFiles {
+ if serviceFile.Name() == "skip" {
+ skip = true
+ }
+ }
+ if skip {
+ continue
+ }
+
+ fmt.Println("Processing folder", serviceDir)
+ makeProto := exec.Command("make", "docs")
+ makeProto.Dir = serviceDir
+ fmt.Println(serviceDir)
+ outp, err := makeProto.CombinedOutput()
+ if err != nil {
+ fmt.Println("Failed to make docs", string(outp))
+ os.Exit(1)
+ }
+ serviceName := f.Name()
+ dat, err := ioutil.ReadFile(filepath.Join(serviceDir, "README.md"))
+ if err != nil {
+ fmt.Println("Failed to read readme", string(outp))
+ os.Exit(1)
+ }
+
+ contentDir := filepath.Join(workDir, postContentPath)
+ err = os.MkdirAll(contentDir, 0777)
+ if err != nil {
+ fmt.Println("Failed to create content dir", string(outp))
+ os.Exit(1)
+ }
+
+ contentFile := filepath.Join(workDir, postContentPath, serviceName+".md")
+ err = ioutil.WriteFile(contentFile, append([]byte("---\ntitle: "+serviceName+"\n---\n"), dat...), 0777)
+ if err != nil {
+ fmt.Printf("Failed to write post content to %v:\n%v\n", contentFile, string(outp))
+ os.Exit(1)
+ }
+
+ apiJSON := filepath.Join(serviceDir, "api-"+serviceName+".json")
+ js, err := ioutil.ReadFile(apiJSON)
+ if err != nil {
+ apiJSON := filepath.Join(serviceDir, "api-protobuf.json")
+ js, err = ioutil.ReadFile(apiJSON)
+ if err != nil {
+ fmt.Println("Failed to read json spec", err)
+ os.Exit(1)
+ }
+ }
+ spec := &openapi3.Swagger{}
+ err = json.Unmarshal(js, &spec)
+ if err != nil {
+ fmt.Println("Failed to unmarshal", err)
+ os.Exit(1)
+ }
+ err = saveSpec(contentFile, spec)
+ if err != nil {
+ fmt.Println("Failed to save to spec file", err)
+ os.Exit(1)
+ }
+
+ openAPIDir := filepath.Join(docPath, serviceName, "api")
+ err = os.MkdirAll(openAPIDir, 0777)
+ if err != nil {
+ fmt.Println("Failed to create api folder", string(outp))
+ os.Exit(1)
+ }
+
+ err = CopyFile(filepath.Join(serviceDir, "redoc-static.html"), filepath.Join(docPath, serviceName, "api", "index.html"))
+ if err != nil {
+ fmt.Println("Failed to copy redoc", string(outp))
+ os.Exit(1)
+ }
+
+ cmd := exec.Command("hugo", "-D", "-d", "../../")
+ cmd.Dir = filepath.Join(docPath, "hugo-tania", "site")
+ outp, err = cmd.CombinedOutput()
+ if err != nil {
+ fmt.Println("Build hugo site", string(outp))
+ os.Exit(1)
+ }
+ }
+ }
+}
+
+func saveSpec(filepath string, spec *openapi3.Swagger) error {
+ fi, err := os.OpenFile(filepath, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
+ if err != nil {
+ return err
+ }
+ //spec.Paths[0].Parameters[0].MarshalJSON()
+ //spec.Paths[0].Options
+ //spec.Paths[0].Post.RequestBody.
+ tmpl, err := template.New("test").Funcs(template.FuncMap{
+ "params": func(p openapi3.Parameters) string {
+ ls := ""
+ for _, v := range p {
+ //if v.Value.In == "body" {
+ bs, _ := v.MarshalJSON()
+ ls += string(bs) + ", "
+ //}
+ }
+ return ls
+ },
+ // @todo should take SpecRef here not RequestBodyRef
+ "schemaJSON": func(ref string) string {
+ for k, v := range spec.Components.Schemas {
+ // ie. #/components/requestBodies/PostsSaveRequest contains
+ // SaveRequest, can't see any other way to correlate
+ if strings.HasSuffix(ref, k) {
+ bs, _ := json.MarshalIndent(schemaToMap(v, spec.Components.Schemas), "", " ")
+ return string(bs)
+ }
+ }
+
+ return "Schema related to " + ref + " not found"
+
+ },
+ "schemaDescription": func(ref string) string {
+ for k, v := range spec.Components.Schemas {
+ // ie. #/components/requestBodies/PostsSaveRequest contains
+ // SaveRequest, can't see any other way to correlate
+ if strings.HasSuffix(ref, k) {
+ return v.Value.Description
+ }
+ }
+
+ return "Schema related to " + ref + " not found"
+
+ },
+ // turn chat/Chat/History
+ // to Chat History
+ "titleize": func(s string) string {
+ parts := strings.Split(s, "/")
+ if len(parts) > 2 {
+ return strings.Join(parts[2:], " ")
+ }
+ return strings.Join(parts, " ")
+ },
+ "firstResponseRef": func(rs openapi3.Responses) string {
+ return rs.Get(200).Ref
+ },
+ }).Parse(templ)
+ if err != nil {
+ panic(err)
+ }
+ return tmpl.Execute(fi, spec)
+}
+
+func schemaToMap(spec *openapi3.SchemaRef, schemas map[string]*openapi3.SchemaRef) map[string]interface{} {
+ var recurse func(props map[string]*openapi3.SchemaRef) map[string]interface{}
+ recurse = func(props map[string]*openapi3.SchemaRef) map[string]interface{} {
+ ret := map[string]interface{}{}
+ for k, v := range props {
+ k = strcase.SnakeCase(k)
+ //v.Value.
+ if v.Value.Type == "object" {
+ // @todo identify what is a slice and what is not!
+ // currently the openapi converter messes this up
+ // see redoc html output
+ ret[k] = []interface{}{recurse(v.Value.Properties)}
+ continue
+ }
+ switch v.Value.Type {
+ case "string":
+ if len(v.Value.Description) > 0 {
+ ret[k] = strings.Replace(v.Value.Description, "\n", ".", -1)
+ } else {
+ ret[k] = v.Value.Type
+ }
+ case "number":
+ ret[k] = 1
+ case "boolean":
+ ret[k] = true
+ }
+
+ }
+ return ret
+ }
+ return recurse(spec.Value.Properties)
+}
+
+const templ = `
+## cURL
+
+{{ range $key, $value := .Paths }}
+### {{ $key | titleize }}
+
+{{ $value.Post.RequestBody.Ref | schemaDescription }}
+` + "```" + `shell
+> curl 'https://api.m3o.com{{ $key }}' \
+ -H 'micro-namespace: $yourNamespace' \
+ -H 'authorization: Bearer $yourToken' \
+ -d {{ $value.Post.RequestBody.Ref | schemaJSON }};
+# Response
+{{ $value.Post.Responses | firstResponseRef | schemaJSON }}
+` + "```" + `
+
+{{ end }}
+`
+
+// CopyFile copies a file from src to dst. If src and dst files exist, and are
+// the same, then return success. Otherise, attempt to create a hard link
+// between the two files. If that fail, copy the file contents from src to dst.
+// from https://stackoverflow.com/questions/21060945/simple-way-to-copy-a-file-in-golang
+func CopyFile(src, dst string) (err error) {
+ sfi, err := os.Stat(src)
+ if err != nil {
+ return
+ }
+ if !sfi.Mode().IsRegular() {
+ // cannot copy non-regular files (e.g., directories,
+ // symlinks, devices, etc.)
+ return fmt.Errorf("CopyFile: non-regular source file %s (%q)", sfi.Name(), sfi.Mode().String())
+ }
+ dfi, err := os.Stat(dst)
+ if err != nil {
+ if !os.IsNotExist(err) {
+ return
+ }
+ } else {
+ if !(dfi.Mode().IsRegular()) {
+ return fmt.Errorf("CopyFile: non-regular destination file %s (%q)", dfi.Name(), dfi.Mode().String())
+ }
+ if os.SameFile(sfi, dfi) {
+ return
+ }
+ }
+ if err = os.Link(src, dst); err == nil {
+ return
+ }
+ err = copyFileContents(src, dst)
+ return
+}
+
+// copyFileContents copies the contents of the file named src to the file named
+// by dst. The file will be created if it does not already exist. If the
+// destination file exists, all it's contents will be replaced by the contents
+// of the source file.
+func copyFileContents(src, dst string) (err error) {
+ in, err := os.Open(src)
+ if err != nil {
+ return
+ }
+ defer in.Close()
+ out, err := os.Create(dst)
+ if err != nil {
+ return
+ }
+ defer func() {
+ cerr := out.Close()
+ if err == nil {
+ err = cerr
+ }
+ }()
+ if _, err = io.Copy(out, in); err != nil {
+ return
+ }
+ err = out.Sync()
+ return
+}
diff --git a/cmd/skip b/cmd/skip
new file mode 100644
index 0000000..e69de29
diff --git a/blog/comments/.gitignore b/comments/.gitignore
similarity index 100%
rename from blog/comments/.gitignore
rename to comments/.gitignore
diff --git a/blog/comments/Dockerfile b/comments/Dockerfile
similarity index 100%
rename from blog/comments/Dockerfile
rename to comments/Dockerfile
diff --git a/blog/comments/Makefile b/comments/Makefile
similarity index 55%
rename from blog/comments/Makefile
rename to comments/Makefile
index 9900f50..0da996e 100644
--- a/blog/comments/Makefile
+++ b/comments/Makefile
@@ -5,8 +5,13 @@ MODIFY=Mgithub.com/micro/micro/proto/api/api.proto=github.com/micro/micro/v3/pro
.PHONY: proto
proto:
- protoc --proto_path=. --micro_out=${MODIFY}:. --go_out=${MODIFY}:. proto/comments.proto
+ protoc --openapi_out=. --proto_path=. --micro_out=${MODIFY}:. --go_out=${MODIFY}:. proto/comments.proto
+
+.PHONY: docs
+docs:
+ protoc --openapi_out=. --proto_path=. --micro_out=${MODIFY}:. --go_out=${MODIFY}:. proto/comments.proto
+ @redoc-cli bundle api-comments.json
.PHONY: build
build: proto
diff --git a/blog/comments/README.md b/comments/README.md
similarity index 100%
rename from blog/comments/README.md
rename to comments/README.md
diff --git a/blog/comments/generate.go b/comments/generate.go
similarity index 100%
rename from blog/comments/generate.go
rename to comments/generate.go
diff --git a/comments/github.com/micro/services/comments/proto/comments.pb.go b/comments/github.com/micro/services/comments/proto/comments.pb.go
new file mode 100644
index 0000000..4548b55
--- /dev/null
+++ b/comments/github.com/micro/services/comments/proto/comments.pb.go
@@ -0,0 +1,461 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.6.1
+// source: proto/comments.proto
+
+package comments
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ 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)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type Comment struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Post string `protobuf:"bytes,2,opt,name=post,proto3" json:"post,omitempty"`
+ Author string `protobuf:"bytes,3,opt,name=author,proto3" json:"author,omitempty"`
+ Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"`
+ Created int64 `protobuf:"varint,5,opt,name=created,proto3" json:"created,omitempty"`
+}
+
+func (x *Comment) Reset() {
+ *x = Comment{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_comments_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Comment) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Comment) ProtoMessage() {}
+
+func (x *Comment) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_comments_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 Comment.ProtoReflect.Descriptor instead.
+func (*Comment) Descriptor() ([]byte, []int) {
+ return file_proto_comments_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Comment) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *Comment) GetPost() string {
+ if x != nil {
+ return x.Post
+ }
+ return ""
+}
+
+func (x *Comment) GetAuthor() string {
+ if x != nil {
+ return x.Author
+ }
+ return ""
+}
+
+func (x *Comment) GetMessage() string {
+ if x != nil {
+ return x.Message
+ }
+ return ""
+}
+
+func (x *Comment) GetCreated() int64 {
+ if x != nil {
+ return x.Created
+ }
+ return 0
+}
+
+type NewRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // post id
+ Post string `protobuf:"bytes,1,opt,name=post,proto3" json:"post,omitempty"`
+ // message to leave
+ Author string `protobuf:"bytes,2,opt,name=author,proto3" json:"author,omitempty"`
+ Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"`
+}
+
+func (x *NewRequest) Reset() {
+ *x = NewRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_comments_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NewRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NewRequest) ProtoMessage() {}
+
+func (x *NewRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_comments_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 NewRequest.ProtoReflect.Descriptor instead.
+func (*NewRequest) Descriptor() ([]byte, []int) {
+ return file_proto_comments_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *NewRequest) GetPost() string {
+ if x != nil {
+ return x.Post
+ }
+ return ""
+}
+
+func (x *NewRequest) GetAuthor() string {
+ if x != nil {
+ return x.Author
+ }
+ return ""
+}
+
+func (x *NewRequest) GetMessage() string {
+ if x != nil {
+ return x.Message
+ }
+ return ""
+}
+
+type NewResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *NewResponse) Reset() {
+ *x = NewResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_comments_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NewResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NewResponse) ProtoMessage() {}
+
+func (x *NewResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_comments_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 NewResponse.ProtoReflect.Descriptor instead.
+func (*NewResponse) Descriptor() ([]byte, []int) {
+ return file_proto_comments_proto_rawDescGZIP(), []int{2}
+}
+
+type ListRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Post string `protobuf:"bytes,1,opt,name=post,proto3" json:"post,omitempty"`
+}
+
+func (x *ListRequest) Reset() {
+ *x = ListRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_comments_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListRequest) ProtoMessage() {}
+
+func (x *ListRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_comments_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 ListRequest.ProtoReflect.Descriptor instead.
+func (*ListRequest) Descriptor() ([]byte, []int) {
+ return file_proto_comments_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *ListRequest) GetPost() string {
+ if x != nil {
+ return x.Post
+ }
+ return ""
+}
+
+type ListResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Comments []*Comment `protobuf:"bytes,1,rep,name=comments,proto3" json:"comments,omitempty"`
+}
+
+func (x *ListResponse) Reset() {
+ *x = ListResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_comments_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListResponse) ProtoMessage() {}
+
+func (x *ListResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_comments_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 ListResponse.ProtoReflect.Descriptor instead.
+func (*ListResponse) Descriptor() ([]byte, []int) {
+ return file_proto_comments_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *ListResponse) GetComments() []*Comment {
+ if x != nil {
+ return x.Comments
+ }
+ return nil
+}
+
+var File_proto_comments_proto protoreflect.FileDescriptor
+
+var file_proto_comments_proto_rawDesc = []byte{
+ 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+ 0x22, 0x79, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70,
+ 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x6f, 0x73, 0x74, 0x12,
+ 0x16, 0x0a, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
+ 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+ 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01,
+ 0x28, 0x03, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x52, 0x0a, 0x0a, 0x4e,
+ 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x73,
+ 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x6f, 0x73, 0x74, 0x12, 0x16, 0x0a,
+ 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61,
+ 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22,
+ 0x0d, 0x0a, 0x0b, 0x4e, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21,
+ 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a,
+ 0x04, 0x70, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x6f, 0x73,
+ 0x74, 0x22, 0x3d, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x43,
+ 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+ 0x32, 0x79, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x03,
+ 0x4e, 0x65, 0x77, 0x12, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x4e,
+ 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x4e, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x37, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x15, 0x2e, 0x63, 0x6f, 0x6d,
+ 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x4c, 0x69, 0x73,
+ 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x33, 0x5a, 0x31, 0x67,
+ 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x2f,
+ 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74,
+ 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+ 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_proto_comments_proto_rawDescOnce sync.Once
+ file_proto_comments_proto_rawDescData = file_proto_comments_proto_rawDesc
+)
+
+func file_proto_comments_proto_rawDescGZIP() []byte {
+ file_proto_comments_proto_rawDescOnce.Do(func() {
+ file_proto_comments_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_comments_proto_rawDescData)
+ })
+ return file_proto_comments_proto_rawDescData
+}
+
+var file_proto_comments_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
+var file_proto_comments_proto_goTypes = []interface{}{
+ (*Comment)(nil), // 0: comments.Comment
+ (*NewRequest)(nil), // 1: comments.NewRequest
+ (*NewResponse)(nil), // 2: comments.NewResponse
+ (*ListRequest)(nil), // 3: comments.ListRequest
+ (*ListResponse)(nil), // 4: comments.ListResponse
+}
+var file_proto_comments_proto_depIdxs = []int32{
+ 0, // 0: comments.ListResponse.comments:type_name -> comments.Comment
+ 1, // 1: comments.Comments.New:input_type -> comments.NewRequest
+ 3, // 2: comments.Comments.List:input_type -> comments.ListRequest
+ 2, // 3: comments.Comments.New:output_type -> comments.NewResponse
+ 4, // 4: comments.Comments.List:output_type -> comments.ListResponse
+ 3, // [3:5] is the sub-list for method output_type
+ 1, // [1:3] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_proto_comments_proto_init() }
+func file_proto_comments_proto_init() {
+ if File_proto_comments_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_proto_comments_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Comment); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_comments_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NewRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_comments_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NewResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_comments_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_comments_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_proto_comments_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 5,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_proto_comments_proto_goTypes,
+ DependencyIndexes: file_proto_comments_proto_depIdxs,
+ MessageInfos: file_proto_comments_proto_msgTypes,
+ }.Build()
+ File_proto_comments_proto = out.File
+ file_proto_comments_proto_rawDesc = nil
+ file_proto_comments_proto_goTypes = nil
+ file_proto_comments_proto_depIdxs = nil
+}
diff --git a/blog/comments/proto/comments.pb.micro.go b/comments/github.com/micro/services/comments/proto/comments.pb.micro.go
similarity index 100%
rename from blog/comments/proto/comments.pb.micro.go
rename to comments/github.com/micro/services/comments/proto/comments.pb.micro.go
diff --git a/blog/comments/handler/comments.go b/comments/handler/comments.go
similarity index 95%
rename from blog/comments/handler/comments.go
rename to comments/handler/comments.go
index 380a31b..e999246 100644
--- a/blog/comments/handler/comments.go
+++ b/comments/handler/comments.go
@@ -7,7 +7,7 @@ import (
"github.com/google/uuid"
"github.com/micro/dev/model"
"github.com/micro/micro/v3/service/store"
- pb "github.com/micro/services/blog/comments/proto"
+ pb "github.com/micro/services/comments/proto"
)
type Comments struct {
diff --git a/blog/comments/main.go b/comments/main.go
similarity index 86%
rename from blog/comments/main.go
rename to comments/main.go
index 9e56f90..2f22b82 100644
--- a/blog/comments/main.go
+++ b/comments/main.go
@@ -3,7 +3,7 @@ package main
import (
"github.com/micro/micro/v3/service"
"github.com/micro/micro/v3/service/logger"
- "github.com/micro/services/blog/comments/handler"
+ "github.com/micro/services/comments/handler"
)
func main() {
diff --git a/blog/comments/micro.mu b/comments/micro.mu
similarity index 100%
rename from blog/comments/micro.mu
rename to comments/micro.mu
diff --git a/blog/comments/proto/comments.pb.go b/comments/proto/comments.pb.go
similarity index 100%
rename from blog/comments/proto/comments.pb.go
rename to comments/proto/comments.pb.go
diff --git a/comments/proto/comments.pb.micro.go b/comments/proto/comments.pb.micro.go
new file mode 100644
index 0000000..ccff854
--- /dev/null
+++ b/comments/proto/comments.pb.micro.go
@@ -0,0 +1,110 @@
+// Code generated by protoc-gen-micro. DO NOT EDIT.
+// source: proto/comments.proto
+
+package comments
+
+import (
+ fmt "fmt"
+ proto "github.com/golang/protobuf/proto"
+ math "math"
+)
+
+import (
+ context "context"
+ api "github.com/micro/micro/v3/service/api"
+ client "github.com/micro/micro/v3/service/client"
+ server "github.com/micro/micro/v3/service/server"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ api.Endpoint
+var _ context.Context
+var _ client.Option
+var _ server.Option
+
+// Api Endpoints for Comments service
+
+func NewCommentsEndpoints() []*api.Endpoint {
+ return []*api.Endpoint{}
+}
+
+// Client API for Comments service
+
+type CommentsService interface {
+ New(ctx context.Context, in *NewRequest, opts ...client.CallOption) (*NewResponse, error)
+ List(ctx context.Context, in *ListRequest, opts ...client.CallOption) (*ListResponse, error)
+}
+
+type commentsService struct {
+ c client.Client
+ name string
+}
+
+func NewCommentsService(name string, c client.Client) CommentsService {
+ return &commentsService{
+ c: c,
+ name: name,
+ }
+}
+
+func (c *commentsService) New(ctx context.Context, in *NewRequest, opts ...client.CallOption) (*NewResponse, error) {
+ req := c.c.NewRequest(c.name, "Comments.New", in)
+ out := new(NewResponse)
+ err := c.c.Call(ctx, req, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *commentsService) List(ctx context.Context, in *ListRequest, opts ...client.CallOption) (*ListResponse, error) {
+ req := c.c.NewRequest(c.name, "Comments.List", in)
+ out := new(ListResponse)
+ err := c.c.Call(ctx, req, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// Server API for Comments service
+
+type CommentsHandler interface {
+ New(context.Context, *NewRequest, *NewResponse) error
+ List(context.Context, *ListRequest, *ListResponse) error
+}
+
+func RegisterCommentsHandler(s server.Server, hdlr CommentsHandler, opts ...server.HandlerOption) error {
+ type comments interface {
+ New(ctx context.Context, in *NewRequest, out *NewResponse) error
+ List(ctx context.Context, in *ListRequest, out *ListResponse) error
+ }
+ type Comments struct {
+ comments
+ }
+ h := &commentsHandler{hdlr}
+ return s.Handle(s.NewHandler(&Comments{h}, opts...))
+}
+
+type commentsHandler struct {
+ CommentsHandler
+}
+
+func (h *commentsHandler) New(ctx context.Context, in *NewRequest, out *NewResponse) error {
+ return h.CommentsHandler.New(ctx, in, out)
+}
+
+func (h *commentsHandler) List(ctx context.Context, in *ListRequest, out *ListResponse) error {
+ return h.CommentsHandler.List(ctx, in, out)
+}
diff --git a/comments/proto/comments.proto b/comments/proto/comments.proto
new file mode 100644
index 0000000..37c3da9
--- /dev/null
+++ b/comments/proto/comments.proto
@@ -0,0 +1,35 @@
+syntax = "proto3";
+
+package comments;
+option go_package = "proto;comments";
+
+service Comments {
+ rpc New(NewRequest) returns (NewResponse) {}
+ rpc List(ListRequest) returns (ListResponse) {}
+}
+
+message Comment {
+ string id = 1;
+ string post = 2;
+ string author = 3;
+ string message = 4;
+ int64 created = 5;
+}
+
+message NewRequest {
+ // post id
+ string post = 1;
+ // message to leave
+ string author = 2;
+ string message = 3;
+}
+
+message NewResponse {}
+
+message ListRequest{
+ string post = 1;
+}
+
+message ListResponse{
+ repeated Comment comments = 1;
+}
diff --git a/comments/skip b/comments/skip
new file mode 100644
index 0000000..e69de29
diff --git a/docs/hugo-tania/.gitignore b/docs/hugo-tania/.gitignore
new file mode 100644
index 0000000..388bf7f
--- /dev/null
+++ b/docs/hugo-tania/.gitignore
@@ -0,0 +1 @@
+exampleSite/resources
\ No newline at end of file
diff --git a/docs/hugo-tania/LICENSE b/docs/hugo-tania/LICENSE
new file mode 100644
index 0000000..a00fd7a
--- /dev/null
+++ b/docs/hugo-tania/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 WingLim
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/docs/hugo-tania/README.md b/docs/hugo-tania/README.md
new file mode 100644
index 0000000..3b47b3a
--- /dev/null
+++ b/docs/hugo-tania/README.md
@@ -0,0 +1,84 @@
+# Hugo Theme Tania
+
+A simple theme for bloggers.
+
+## Demo
+
+[Example Site](https://hugo-tania.netlify.app/)
+
+[](https://app.netlify.com/sites/hugo-tania/deploys)
+
+## Introduction
+Most of the styles for this theme come from [taniarascia.com](https://github.com/taniarascia/taniarascia.com)
+
+I like it's style, so I transplant it to Hugo.
+
+And is that why this theme called Tania.
+
+Thank Tania Rascia again.
+
+Here is some features:
+
+- Dark mode(It can switch automatically or manually)
+- Footnotes(Float on the right side)
+
+## Usage
+
+### Installation
+
+In your site's root dir
+
+```bash
+git submodule add https://github.com/WingLim/hugo-tania themes/hugo-tania
+```
+
+Edit your site config following `site/config.yaml`.
+
+### Params
+
+`titleEmoji` will show before the blog title on site navbar.
+
+```yaml
+titleEmoji: '😎'
+```
+
+`socialOptions` will show on index bio with `_index.md` content.
+Account with icon can set as below:
+```yaml
+socialOptions:
+ dev-to:
+ facebook:
+ github:
+ instagram:
+ linkedin:
+ medium:
+ stack-overflow:
+ telegram:
+ twitter:
+ twitch:
+ whatsapp:
+```
+
+### Layout
+
+`articles` layout is for showing all articles you write.
+
+Add `articles.md` to site `content` dir, and write as below:
+
+```markdown
+---
+title: Articles
+subtitle: Posts, tutorials, snippets, musings, and everything else.
+date: 2020-11-26
+type: section
+layout: "archives"
+---
+```
+
+## Thanks to
+- [你好黑暗,我的老朋友 —— 为网站添加用户友好的深色模式支持](https://blog.skk.moe/post/hello-darkmode-my-old-friend/)
+- [Footnotes, citations, and sidenotes](https://prose.yihui.org/about/#footnotes-citations-and-sidenotes)
+
+## License
+
+[MIT](https://github.com/WingLim/hugo-tania/blob/main/LICENSE)
diff --git a/docs/hugo-tania/assets/js/features.js b/docs/hugo-tania/assets/js/features.js
new file mode 100644
index 0000000..4e55902
--- /dev/null
+++ b/docs/hugo-tania/assets/js/features.js
@@ -0,0 +1,171 @@
+renderFootnotes = function () {
+ const removeEl = (el) => {
+ if (!el) return;
+ el.remove ? el.remove() : el.parentNode.removeChild(el);
+ };
+
+ const insertAfter = (target, sib) => {
+ target.after ? target.after(sib) : (
+ target.parentNode.insertBefore(sib, target.nextSibling)
+ );
+ };
+
+ const insideOut = (el) => {
+ var p = el.parentNode, x = el.innerHTML,
+ c = document.createElement('div'); // a tmp container
+ insertAfter(p, c);
+ c.appendChild(el);
+ el.innerHTML = '';
+ el.appendChild(p);
+ p.innerHTML = x; // let the original parent have the content of its child
+ insertAfter(c, c.firstElementChild);
+ removeEl(c);
+ };
+
+ document.querySelectorAll('.footnotes > ol > li[id^="fn"], #refs > div[id^="ref-"]').forEach(function (fn) {
+ a = document.querySelectorAll('a[href="#' + fn.id + '"]');
+ if (a.length === 0) return;
+ a.forEach(function (el) { el.removeAttribute('href') });
+ a = a[0];
+ side = document.createElement('div');
+ side.className = 'side side-right';
+ if (/^fn/.test(fn.id)) {
+ side.innerHTML = fn.innerHTML;
+ var number = a.innerText; // footnote number
+ side.firstElementChild.innerHTML = '' + number +
+ ' ' + side.firstElementChild.innerHTML;
+ removeEl(side.querySelector('a[href^="#fnref"]')); // remove backreference
+ a.parentNode.tagName === 'SUP' && insideOut(a);
+ } else {
+ side.innerHTML = fn.outerHTML;
+ a = a.parentNode;
+ }
+ insertAfter(a, side);
+ a.classList.add('note-ref');
+ removeEl(fn);
+ })
+ document.querySelectorAll('.footnotes, #refs').forEach(function (fn) {
+ var items = fn.children;
+ if (fn.id === 'refs') return items.length === 0 && removeEl(fn);
+ // there must be a
and an left
+ if (items.length !== 2 || items[0].tagName !== 'HR' || items[1].tagName !== 'OL') return;
+ items[1].childElementCount === 0 && removeEl(fn);
+ });
+}();
+
+renderAnchor = function () {
+ for (let num = 1; num <= 6; num++) {
+ // search h1-h6
+ const headers = document.querySelectorAll('.article-post>h' + num);
+ for (let i = 0; i < headers.length; i++) {
+ const header = headers[i];
+ // add anchor before h1-h6
+ header.innerHTML = `${header.innerHTML}`;
+ }
+ }
+}();
+
+switchDarkMode = function () {
+ const rootElement = document.documentElement; //
+ const darkModeStorageKey = 'user-color-scheme'; // use as localStorage's key
+ const rootElementDarkModeAttributeName = 'data-user-color-scheme';
+ const darkModeTogglebuttonElement = document.getElementById('dark-mode-button');
+
+ const setLS = (k, v) => {
+ try {
+ localStorage.setItem(k, v);
+ } catch (e) { }
+ }
+
+ const removeLS = (k) => {
+ try {
+ localStorage.removeItem(k);
+ } catch (e) { }
+ }
+
+ const getLS = (k) => {
+ try {
+ return localStorage.getItem(k);
+ } catch (e) {
+ return null // the same as localStorage.getItem() get nothing
+ }
+ }
+
+ const getModeFromCSSMediaQuery = () => {
+ // use matchMedia API
+ return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
+ }
+
+ const resetRootDarkModeAttributeAndLS = () => {
+ rootElement.removeAttribute(rootElementDarkModeAttributeName);
+ removeLS(darkModeStorageKey);
+ }
+
+ const validColorModeKeys = {
+ 'dark': true,
+ 'light': true
+ }
+
+ const modeIcons = {
+ 'dark': '☀️',
+ 'light': '🌙'
+ }
+
+ const setModeButtonIcon = (mode) => {
+ darkModeTogglebuttonElement.innerHTML = modeIcons[mode]
+ }
+
+ const applyCustomDarkModeSettings = (mode) => {
+ // receive user's operation or get previous mode from localStorage
+ const currentSetting = mode || getLS(darkModeStorageKey);
+
+ if (currentSetting === getModeFromCSSMediaQuery()) {
+ // When the user selected mode equal prefers-color-scheme
+ // reset and restored to automatic mode
+ nowMode = getModeFromCSSMediaQuery()
+ resetRootDarkModeAttributeAndLS();
+ } else if (validColorModeKeys[currentSetting]) {
+ nowMode = currentSetting
+ rootElement.setAttribute(rootElementDarkModeAttributeName, currentSetting);
+ } else {
+ // 首次访问或从未使用过开关、localStorage 中没有存储的值,currentSetting 是 null
+ // 或者 localStorage 被篡改,currentSetting 不是合法值
+ nowMode = getModeFromCSSMediaQuery()
+ resetRootDarkModeAttributeAndLS();
+ }
+ setModeButtonIcon(nowMode)
+ }
+
+ const invertDarkModeObj = {
+ 'dark': 'light',
+ 'light': 'dark'
+ }
+
+ const toggleCustomDarkMode = () => {
+ let currentSetting = getLS(darkModeStorageKey);
+
+ if (validColorModeKeys[currentSetting]) {
+ // get mode from localStorage and set the opposite
+ currentSetting = invertDarkModeObj[currentSetting];
+ } else if (currentSetting === null) {
+ // if get null from localStorage
+ // get mode from prefers-color-scheme and set the opposite
+ currentSetting = invertDarkModeObj[getModeFromCSSMediaQuery()];
+ } else {
+ // get anything error, return
+ return;
+ }
+ // set opposite mode into localStorage
+ setLS(darkModeStorageKey, currentSetting);
+
+ return currentSetting;
+ }
+
+ // when page loaded set page mode
+ applyCustomDarkModeSettings();
+
+ darkModeTogglebuttonElement.addEventListener('click', () => {
+ // handle user click switch dark mode button
+ applyCustomDarkModeSettings(toggleCustomDarkMode());
+ })
+}();
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/base/_dark.scss b/docs/hugo-tania/assets/sass/base/_dark.scss
new file mode 100644
index 0000000..40264d3
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/base/_dark.scss
@@ -0,0 +1,51 @@
+@media (prefers-color-scheme: dark) {
+ :root {
+ --color-mode: dark;
+ }
+
+ :root:not([data-user-color-scheme]) {
+ --h1-color: white;
+ --font-color: #b3b9c5;
+ --heading-color: #ffd479;
+ --dark-font-color: #ced4da;
+ --background: #1f2022;
+ --medium-font-color: #dee2e6;
+ --light-font-color: #868e96;
+ --light-background: #2D2D31;
+ --light-background-hover: #3b3b3e;
+ --code-background-color: #2e2e30;
+ --border: #404040;
+ --link-color: #6ab0f3;
+ --link-color-darker: #4a72a5;
+ --link-hover-color: #e1a6f2;
+ --navbar-color: #1d1d1d;
+ --blockquote: #2b2b2b;
+ --blockquote-left: #191919;
+ --transparent-text: rgba(255, 255, 255, 0.7);
+ --transparent-bg: rgba(0, 0, 0, 0.2);
+ --light-transparent-bg: rgba(255, 255, 255, 0.05);
+ }
+}
+
+[data-user-color-scheme='dark'] {
+ --h1-color: white;
+ --font-color: #b3b9c5;
+ --heading-color: #ffd479;
+ --dark-font-color: #ced4da;
+ --background: #1f2022;
+ --medium-font-color: #dee2e6;
+ --light-font-color: #868e96;
+ --light-background: #2D2D31;
+ --light-background-hover: #3b3b3e;
+ --code-background-color: #2e2e30;
+ --border: #404040;
+ --link-color: #6ab0f3;
+ --link-color-darker: #4a72a5;
+ --link-hover-color: #e1a6f2;
+ --navbar-color: #1d1d1d;
+ --blockquote: #2b2b2b;
+ --blockquote-left: #191919;
+ --transparent-text: rgba(255, 255, 255, 0.7);
+ --transparent-bg: rgba(0, 0, 0, 0.2);
+ --light-transparent-bg: rgba(255, 255, 255, 0.05);
+}
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/base/_grid.scss b/docs/hugo-tania/assets/sass/base/_grid.scss
new file mode 100644
index 0000000..5c62eec
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/base/_grid.scss
@@ -0,0 +1,29 @@
+/* Grid and flex */
+
+.flex {
+ display: flex;
+ align-items: center;
+}
+
+.flex-row {
+ display: flex;
+ flex-direction: column;
+}
+
+@media screen and (min-width: 800px) {
+ .flex-row {
+ flex-direction: row;
+ }
+}
+
+.flex-col {
+ flex: 1;
+}
+
+.flex-two-thirds {
+ flex: 2;
+}
+
+.justify-center {
+ justify-content: center;
+}
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/base/_headings.scss b/docs/hugo-tania/assets/sass/base/_headings.scss
new file mode 100644
index 0000000..b9c3d15
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/base/_headings.scss
@@ -0,0 +1,171 @@
+/* Headings */
+
+h1 {
+ color: var(--h1-color);
+}
+
+h3,
+h4 {
+ color: var(--medium-font-color);
+}
+
+h2,
+h5 {
+ color: var(--heading-color);
+}
+
+h1,
+h2,
+h3,
+h4,
+h5 {
+ margin: 0 0 1.5rem 0;
+ font-weight: 700;
+ line-height: 1.2;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+h1:not(:first-child),
+h2:not(:first-child),
+h3:not(:first-child),
+h4:not(:first-child) {
+ margin-top: 3rem;
+}
+
+h1 {
+ font-size: 2.5rem;
+ line-height: 1.1;
+}
+
+h2 {
+ font-size: 1.75rem;
+ padding-bottom: 0.5rem;
+ border-bottom: 4px solid var(--light-background);
+
+ code {
+ font-size: 1.75rem !important;
+ }
+}
+
+h3 {
+ font-size: 1.5rem;
+ color: var(--font-color);
+ font-weight: 600;
+ margin-bottom: 1rem;
+
+ code {
+ font-size: 1.4rem !important;
+ }
+}
+
+h4 {
+ font-size: 1.3rem;
+ color: var(--font-color);
+ font-weight: 500;
+ margin-bottom: 1rem;
+ border-bottom: 2px solid var(--light-background);
+ padding-bottom: 0.25rem;
+}
+
+h5 {
+ font-size: 1.2rem;
+ margin-bottom: 1rem;
+}
+
+@media screen and (min-width: 800px) {
+ h1 {
+ font-size: 3rem;
+ }
+
+ h2 {
+ font-size: 1.9rem;
+
+ code {
+ font-size: 1.9rem !important;
+ }
+ }
+
+ h3 {
+ font-size: 1.7rem;
+ color: var(--font-color);
+ font-weight: 600;
+
+ code {
+ font-size: 1.6rem !important;
+ }
+ }
+
+ h4 {
+ font-weight: 400;
+ font-size: 1.4rem;
+ }
+}
+
+a {
+ &.link {
+ display: block;
+ padding: 0.25rem 0;
+ margin: 0.25rem 0;
+ border-radius: 0.35rem;
+ font-weight: 600;
+ color: var(--dark-font-color);
+
+ &:hover {
+ color: var(--link-color);
+ }
+ }
+
+ &.button {
+ display: inline-block;
+ border: 2px solid var(--link-color);
+ padding: 0.3rem 0.6rem;
+ margin-right: 0.75rem;
+ font-weight: 500;
+ background: var(--link-color);
+ color: white;
+ border-radius: 0.35rem;
+ font-size: 0.9rem;
+
+ &.large {
+ padding: 0.8rem 1rem;
+ font-size: 1.05rem;
+ }
+
+ &.secondary {
+ border: 2px solid #edf2ff;
+ background: #edf2ff;
+ color: #3b5bdb;
+ }
+
+ &:hover, &.secondary:hover {
+ border: 2px solid var(--link-color-darker);
+ background: var(--link-color-darker);
+ color: white;
+ }
+ }
+}
+
+@media screen and (min-width: 800px) {
+ a.button {
+ font-size: 0.9rem;
+
+ &.large {
+ padding: 1rem 1.5rem;
+ font-size: 1.1rem;
+ }
+ }
+}
+
+p.subtitle {
+ color: var(--medium-font-color);
+ font-size: 1.3rem;
+ font-weight: 300;
+ margin-bottom: 0;
+}
+
+@media screen and (min-width: 800px) {
+ p.subtitle {
+ font-size: 1.5rem;
+ }
+}
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/base/_links.scss b/docs/hugo-tania/assets/sass/base/_links.scss
new file mode 100644
index 0000000..b5b51a3
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/base/_links.scss
@@ -0,0 +1,19 @@
+/* Links */
+
+a {
+ color: inherit;
+ text-decoration: none;
+
+ &.image-link {
+ border-width: 0;
+ }
+
+ code[class*='language-'] {
+ color: var(--link-color) !important;
+
+ &:hover {
+ background: var(--link-color) !important;
+ color: white !important;
+ }
+ }
+}
diff --git a/docs/hugo-tania/assets/sass/base/_normalize.scss b/docs/hugo-tania/assets/sass/base/_normalize.scss
new file mode 100644
index 0000000..3591806
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/base/_normalize.scss
@@ -0,0 +1,379 @@
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+
+/* Document
+ ========================================================================== */
+
+/**
+ * 1. Correct the line height in all browsers.
+ * 2. Prevent adjustments of font size after orientation changes in iOS.
+ */
+
+html {
+ line-height: 1.15;
+ /* 1 */
+ -webkit-text-size-adjust: 100%;
+ /* 2 */
+}
+
+/* Sections
+ ========================================================================== */
+
+/**
+ * Remove the margin in all browsers.
+ */
+
+body {
+ margin: 0;
+}
+
+/**
+ * Render the `main` element consistently in IE.
+ */
+
+main {
+ display: block;
+}
+
+/**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
+ */
+
+hr {
+ box-sizing: content-box;
+ /* 1 */
+ height: 0;
+ /* 1 */
+ overflow: visible;
+ /* 2 */
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+pre {
+ font-family: monospace, monospace;
+ /* 1 */
+ font-size: 1em;
+ /* 2 */
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Remove the gray background on active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * 1. Remove the bottom border in Chrome 57-
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+ */
+
+abbr[title] {
+ border-bottom: none;
+ /* 1 */
+ text-decoration: underline;
+ /* 2 */
+ text-decoration: underline dotted;
+ /* 2 */
+}
+
+/**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+code,
+kbd,
+samp {
+ font-family: monospace, monospace;
+ /* 1 */
+ font-size: 1em;
+ /* 2 */
+}
+
+/**
+ * Add the correct font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove the border on images inside links in IE 10.
+ */
+
+img {
+ border-style: none;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * 1. Change the font styles in all browsers.
+ * 2. Remove the margin in Firefox and Safari.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit;
+ /* 1 */
+ font-size: 100%;
+ /* 1 */
+ line-height: 1.15;
+ /* 1 */
+ margin: 0;
+ /* 2 */
+}
+
+/**
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
+ */
+
+button,
+input {
+ /* 1 */
+ overflow: visible;
+}
+
+/**
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritance of text transform in Firefox.
+ */
+
+button,
+select {
+ /* 1 */
+ text-transform: none;
+}
+
+/**
+ * Correct the inability to style clickable types in iOS and Safari.
+ */
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+ -webkit-appearance: button;
+}
+
+/**
+ * Remove the inner border and padding in Firefox.
+ */
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+
+/**
+ * Restore the focus styles unset by the previous rule.
+ */
+
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+ outline: 1px dotted ButtonText;
+}
+
+/**
+ * Correct the padding in Firefox.
+ */
+
+fieldset {
+ padding: 0.35em 0.75em 0.625em;
+}
+
+/**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ * `fieldset` elements in all browsers.
+ */
+
+legend {
+ box-sizing: border-box;
+ /* 1 */
+ color: inherit;
+ /* 2 */
+ display: table;
+ /* 1 */
+ max-width: 100%;
+ /* 1 */
+ padding: 0;
+ /* 3 */
+ white-space: normal;
+ /* 1 */
+}
+
+/**
+ * Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+
+progress {
+ vertical-align: baseline;
+}
+
+/**
+ * Remove the default vertical scrollbar in IE 10+.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * 1. Add the correct box sizing in IE 10.
+ * 2. Remove the padding in IE 10.
+ */
+
+[type="checkbox"],
+[type="radio"] {
+ box-sizing: border-box;
+ /* 1 */
+ padding: 0;
+ /* 2 */
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+
+[type="search"] {
+ -webkit-appearance: textfield;
+ /* 1 */
+ outline-offset: -2px;
+ /* 2 */
+}
+
+/**
+ * Remove the inner padding in Chrome and Safari on macOS.
+ */
+
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ /* 1 */
+ font: inherit;
+ /* 2 */
+}
+
+/* Interactive
+ ========================================================================== */
+
+/*
+ * Add the correct display in Edge, IE 10+, and Firefox.
+ */
+
+details {
+ display: block;
+}
+
+/*
+ * Add the correct display in all browsers.
+ */
+
+summary {
+ display: list-item;
+}
+
+/* Misc
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 10+.
+ */
+
+template {
+ display: none;
+}
+
+/**
+ * Add the correct display in IE 10.
+ */
+
+[hidden] {
+ display: none;
+}
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/base/_reset.scss b/docs/hugo-tania/assets/sass/base/_reset.scss
new file mode 100644
index 0000000..62f0ef4
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/base/_reset.scss
@@ -0,0 +1,5 @@
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+}
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/base/_scaffolding.scss b/docs/hugo-tania/assets/sass/base/_scaffolding.scss
new file mode 100644
index 0000000..13e83d2
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/base/_scaffolding.scss
@@ -0,0 +1,179 @@
+/* Scaffolding */
+
+html {
+ font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Roboto',
+ Roboto, Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI',
+ 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
+ color: var(--font-color);
+ font-weight: 400;
+ font-size: 1rem;
+ line-height: 1.75;
+}
+
+body {
+ background: var(--background);
+ margin: 0;
+ padding: 0;
+}
+
+section {
+ margin: 2rem 0;
+
+ &:first-of-type {
+ margin-top: 0;
+ }
+
+ >h2 {
+ display: flex;
+ align-items: center;
+ font-size: 1.6rem;
+ margin-top: 0;
+ margin-bottom: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 800px) {
+ section>h2 {
+ margin-bottom: 2rem;
+ }
+}
+
+.index h2,
+section>h2 {
+ border-bottom-width: 0;
+}
+
+@media screen and (min-width: 800px) {
+
+ .index h2,
+ section>h2 {
+ border-bottom-width: 4px;
+ }
+}
+
+a.section-button {
+ font-weight: 500;
+ background: var(--light-background);
+ color: var(--dark-font-color);
+ padding: 0.4rem 0.6rem;
+ font-size: 0.8rem;
+ border-radius: 0.3rem;
+ border-width: 0 !important;
+ white-space: nowrap;
+ line-height: 1;
+ margin-left: 2rem;
+ margin-top: 0.5rem;
+
+ &:hover {
+ background: var(--light-background-hover);
+ color: var(--heading-color);
+ }
+}
+
+@media screen and (min-width: 800px) {
+ section {
+ margin: 3.5rem 0;
+
+ >h2 {
+ font-size: 2rem;
+ margin: 0 0 1rem;
+ }
+ }
+}
+
+.container {
+ max-width: 1025px;
+ padding: 0 1.5rem;
+ margin-left: auto;
+ margin-right: auto;
+
+ &.page p {
+ max-width: 600px;
+ }
+}
+
+@media screen and (min-width: 800px) {
+ .container {
+ padding: 0 2rem;
+ }
+}
+
+img {
+ display: inline-block;
+ max-width: 100%;
+ height: auto;
+}
+
+p,
+ol,
+ul,
+dl,
+table,
+blockquote {
+ font-size: 1.05rem;
+ margin: 0 0 1.5rem 0;
+}
+
+ul {
+ padding: 0 1rem;
+}
+
+@media screen and (min-width: 800px) {
+
+ p,
+ ol,
+ ul,
+ dl,
+ table,
+ blockquote {
+ font-size: 1.125rem;
+ }
+
+ ul {
+ padding: 0 2rem;
+ }
+}
+
+ul li p {
+ margin: 0;
+}
+
+ul li ul {
+ padding-left: 1rem;
+ margin: 0;
+}
+
+ul li ul li {
+ margin: 0;
+}
+
+ol li ol {
+ margin-bottom: 0;
+}
+
+.task-list-item [type='checkbox'] {
+ margin-right: 0.5rem;
+}
+
+blockquote {
+ margin: 2rem 0;
+ padding: 1rem;
+ background: var(--blockquote);
+ font-weight: 400;
+ border-left: 5px solid var(--blockquote-left);
+}
+
+blockquote :not(pre)>code[class*='language-'] {
+ background: rgba(0, 0, 0, 0.1) !important;
+}
+
+@media screen and (min-width: 800px) {
+ blockquote {
+ padding: 2rem 0 2rem 2rem;
+ }
+}
+
+::selection {
+ background: #3b5bdb;
+ color: white;
+}
diff --git a/docs/hugo-tania/assets/sass/base/_variables.scss b/docs/hugo-tania/assets/sass/base/_variables.scss
new file mode 100644
index 0000000..d2a2c85
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/base/_variables.scss
@@ -0,0 +1,21 @@
+:root {
+ --color-mode: light;
+ --h1-color: #343a40;
+ --font-color: #495057;
+ --heading-color: #343a40;
+ --background: white;
+ --dark-font-color: #1b1d25;
+ --medium-font-color: #60656c;
+ --light-font-color: #858b93;
+ --light-background: #f1f4f8;
+ --light-background-hover: #e1e6ed;
+ --border: #d6d9de;
+ --link-color: #5183f5;
+ --link-color-darker: #364fc7;
+ --navbar-color: #1b1d25;
+ --blockquote: #f9f9f9;
+ --blockquote-left: #e3e6eb;
+ --transparent-text: rgba(0, 0, 0, 0.7);
+ --transparent-bg: rgba(0, 0, 0, 0.05);
+ --light-transparent-bg: rgba(255, 255, 255, 0.1);
+}
diff --git a/docs/hugo-tania/assets/sass/components/_bio.scss b/docs/hugo-tania/assets/sass/components/_bio.scss
new file mode 100644
index 0000000..f8122a2
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/components/_bio.scss
@@ -0,0 +1,11 @@
+.my {
+ padding-top: 2rem;
+ a {
+ border: none;
+ margin-right: 1rem;
+
+ &:hover {
+ border: none;
+ }
+ }
+}
diff --git a/docs/hugo-tania/assets/sass/components/_footer.scss b/docs/hugo-tania/assets/sass/components/_footer.scss
new file mode 100644
index 0000000..422426f
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/components/_footer.scss
@@ -0,0 +1,77 @@
+/* Footer */
+
+.footer {
+ padding: 2rem 0;
+
+ >.flex {
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ }
+
+ img {
+ height: 30px;
+ width: 30px;
+ }
+
+ a {
+ border-radius: 0.35rem;
+ margin: 0 0.05rem;
+ font-weight: 400;
+ font-size: 1rem;
+ border: 1px solid transparent;
+ padding: 0.5rem;
+ margin: 0 0.5rem;
+ color: var(--light-font-color);
+
+ &:hover {
+ color: var(--heading-color);
+ background: var(--light-background);
+ }
+
+ &.img {
+ display: flex;
+ align-items: center;
+ padding: 0;
+ margin: 0 0.75rem;
+ background: none;
+ }
+ }
+}
+
+.footer-links {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-wrap: wrap;
+}
+
+.flex nav {
+ padding: 1rem 0;
+}
+
+@media screen and (min-width: 800px) {
+ .footer {
+ >.flex {
+ align-items: flex-start;
+ margin-left: -1.5rem;
+ margin-right: -1.5rem;
+ }
+
+ a {
+ padding: 0.75rem;
+
+ &.img {
+ padding: 0 0.5rem;
+ margin: 0 1rem;
+ }
+ }
+ }
+
+}
+
+@media print {
+ .footer {
+ display: none;
+ }
+}
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/components/_helpers.scss b/docs/hugo-tania/assets/sass/components/_helpers.scss
new file mode 100644
index 0000000..5370374
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/components/_helpers.scss
@@ -0,0 +1,18 @@
+/* Helpers */
+
+.small {
+ max-width: 600px;
+}
+
+time,
+.meta {
+ color: var(--light-font-color);
+ font-size: 0.85rem;
+ white-space: nowrap;
+ font-weight: 400;
+}
+
+.meta {
+ color: var(--medium-font-color);
+ font-size: 1rem;
+}
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/components/_highlight.scss b/docs/hugo-tania/assets/sass/components/_highlight.scss
new file mode 100644
index 0000000..50f7743
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/components/_highlight.scss
@@ -0,0 +1,165 @@
+$code-font-size: 0.9rem !default;
+$code-color: #f8f8f2 !default;
+$code-background: #373b41 !default;
+$gray: #cacaca !default;
+$code-font-family: Consolas, Monaco, Menlo, "DejaVu Sans Mono",
+ "Bitstream Vera Sans Mono", "Courier New", monospace !default;
+
+code, pre {
+ font-size: $code-font-size;
+ font-family: $code-font-family;
+ background: $code-background;
+}
+
+:not(pre) > code {
+ color: var(--dark-font-color);
+ background: var(--light-background);
+}
+
+code {
+ padding: 3px 5px;
+ border-radius: 4px;
+ color: $code-color;
+}
+
+pre > code {
+ display: block;
+}
+
+.highlight > .chroma {
+ margin: 0;
+
+ border-radius: 5px;
+ overflow-x: auto;
+ box-shadow: 1px 1px 2px rgba(0,0,0,0.125);
+ position: relative;
+ background: $code-background;
+
+ code {
+ padding: 30px 10px 10px;
+ }
+
+ code[data-lang]::before {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ padding: 2px 10px;
+ width: 100%;
+ height: 30px;
+ font-size: $code-font-size;
+ line-height: 1.9;
+ font-weight: bold;
+ color: #b1b1b1;
+ background: darken($code-background, 3%);
+ content: attr(data-lang);
+ }
+
+ table {
+ position: relative;
+ border: none;
+
+ code {
+ padding: 0;
+ }
+ }
+
+
+
+ .lntd {
+ &:first-child {
+ width: 10px;
+
+ pre {
+ margin: 0;
+ padding: 30px 7px 10px;
+ }
+ }
+
+ &:last-child {
+ vertical-align: top;
+
+ pre {
+ margin: 0;
+ padding: 30px 10px 10px;
+ }
+ }
+ }
+
+ table, tr, td {
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ border-collapse: collapse;
+ border: none;
+ }
+
+ /* LineHighlight */ .hl { display: block; width: 100%;background-color: black }
+ /* LineNumbersTable */ .lnt { color: #7f7f7f }
+ /* LineNumbers */ .ln { padding: 0 0.4em 0 0.4em;color: #7f7f7f }
+
+ .err { color: #960050 } /* Error */
+ .c { color: #999999 } /* Comment */
+ .err { color: #f2777a } /* Error */
+ .k { color: #cc99cc } /* Keyword */
+ .l { color: #f99157 } /* Literal */
+ .n { color: #cccccc } /* Name */
+ .o { color: #66cccc } /* Operator */
+ .p { color: #cccccc } /* Punctuation */
+ .cm { color: #999999 } /* Comment.Multiline */
+ .cp { color: #999999 } /* Comment.Preproc */
+ .c1 { color: #999999 } /* Comment.Single */
+ .cs { color: #999999 } /* Comment.Special */
+ .gd { color: #f2777a } /* Generic.Deleted */
+ .ge { font-style: italic } /* Generic.Emph */
+ .gh { color: #cccccc; font-weight: bold } /* Generic.Heading */
+ .gi { color: #99cc99 } /* Generic.Inserted */
+ .gp { color: #999999; font-weight: bold } /* Generic.Prompt */
+ .gs { font-weight: bold } /* Generic.Strong */
+ .gu { color: #66cccc; font-weight: bold } /* Generic.Subheading */
+ .kc { color: #cc99cc } /* Keyword.Constant */
+ .kd { color: #cc99cc } /* Keyword.Declaration */
+ .kn { color: #66cccc } /* Keyword.Namespace */
+ .kp { color: #cc99cc } /* Keyword.Pseudo */
+ .kr { color: #cc99cc } /* Keyword.Reserved */
+ .kt { color: #ffcc66 } /* Keyword.Type */
+ .ld { color: #99cc99 } /* Literal.Date */
+ .m { color: #f99157 } /* Literal.Number */
+ .s { color: #99cc99 } /* Literal.String */
+ .na { color: #6699cc } /* Name.Attribute */
+ .nb { color: #cccccc } /* Name.Builtin */
+ .nc { color: #ffcc66 } /* Name.Class */
+ .no { color: #f2777a } /* Name.Constant */
+ .nd { color: #66cccc } /* Name.Decorator */
+ .ni { color: #cccccc } /* Name.Entity */
+ .ne { color: #f2777a } /* Name.Exception */
+ .nf { color: #6699cc } /* Name.Function */
+ .nl { color: #cccccc } /* Name.Label */
+ .nn { color: #ffcc66 } /* Name.Namespace */
+ .nx { color: #6699cc } /* Name.Other */
+ .py { color: #cccccc } /* Name.Property */
+ .nt { color: #66cccc } /* Name.Tag */
+ .nv { color: #f2777a } /* Name.Variable */
+ .ow { color: #66cccc } /* Operator.Word */
+ .w { color: #cccccc } /* Text.Whitespace */
+ .mf { color: #f99157 } /* Literal.Number.Float */
+ .mh { color: #f99157 } /* Literal.Number.Hex */
+ .mi { color: #f99157 } /* Literal.Number.Integer */
+ .mo { color: #f99157 } /* Literal.Number.Oct */
+ .sb { color: #99cc99 } /* Literal.String.Backtick */
+ .sc { color: #cccccc } /* Literal.String.Char */
+ .sd { color: #999999 } /* Literal.String.Doc */
+ .s2 { color: #99cc99 } /* Literal.String.Double */
+ .se { color: #f99157 } /* Literal.String.Escape */
+ .sh { color: #99cc99 } /* Literal.String.Heredoc */
+ .si { color: #f99157 } /* Literal.String.Interpol */
+ .sx { color: #99cc99 } /* Literal.String.Other */
+ .sr { color: #99cc99 } /* Literal.String.Regex */
+ .s1 { color: #99cc99 } /* Literal.String.Single */
+ .ss { color: #99cc99 } /* Literal.String.Symbol */
+ .bp { color: #cccccc } /* Name.Builtin.Pseudo */
+ .vc { color: #f2777a } /* Name.Variable.Class */
+ .vg { color: #f2777a } /* Name.Variable.Global */
+ .vi { color: #f2777a } /* Name.Variable.Instance */
+ .il { color: #f99157 } /* Literal.Number.Integer.Long */
+}
diff --git a/docs/hugo-tania/assets/sass/components/_navbar.scss b/docs/hugo-tania/assets/sass/components/_navbar.scss
new file mode 100644
index 0000000..0c115dd
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/components/_navbar.scss
@@ -0,0 +1,166 @@
+/* Navbar */
+
+main {
+ margin-top: 50px;
+}
+
+@media screen and (min-width: 800px) {
+ main {
+ margin-top: 0;
+ }
+}
+
+.emoji {
+ margin: 0 0.4rem 0 0.1rem;
+}
+
+.navbar {
+ width: 100%;
+ position: fixed;
+ top: 0;
+ left: 0;
+ background: var(--navbar-color);
+ box-shadow: 0 3px 13px rgba(100, 110, 140, 0.1),
+ 0 2px 4px rgba(100, 110, 140, 0.15);
+ z-index: 2;
+ padding: 0.5rem;
+
+ .flex {
+ justify-content: space-between;
+ }
+
+ a {
+ border-radius: 0.35rem;
+ margin: 0 0.05rem;
+ color: rgba(255, 255, 255, 0.65);
+ font-weight: 400;
+ font-size: 0.85rem;
+ border: 1px solid transparent;
+ padding: 0 0.3rem;
+ background: transparent;
+
+ &:first-of-type {
+ margin-left: -1rem;
+ }
+
+ .emoji {
+ display: none;
+ }
+
+ &.brand {
+ font-weight: 500;
+ color: white;
+ white-space: nowrap;
+ border: none;
+ display: flex;
+ align-items: center;
+ line-height: 1;
+ background: transparent;
+
+ .emoji {
+ display: inline-block !important;
+ }
+
+ img {
+ height: 22px;
+ width: 22px;
+ }
+ }
+ }
+
+ button {
+ font-size: 1rem;
+ margin-right: -1rem;
+ }
+}
+
+@media screen and (min-width: 500px) {
+ .navbar a {
+ font-size: 0.95rem;
+ padding: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 800px) {
+ .emoji {
+ margin: 0 0.5rem 0 0.1rem;
+ }
+
+ .navbar {
+ position: static;
+ padding: 1.5rem 0;
+ background: transparent;
+ box-shadow: none;
+
+ .flex {
+ justify-content: space-between;
+ }
+
+ a {
+ padding: 0.75rem 1.25rem;
+ margin: 0 0.25rem;
+ font-size: 1.2rem;
+ font-weight: 400;
+ color: var(--font-color);
+
+ &:first-of-type {
+ margin-left: -1.5rem;
+ }
+
+ &:hover, &[aria-current='page'] {
+ background: var(--light-background);
+ color: var(--dark-font-color);
+ }
+
+ &.brand {
+ font-size: 1.3rem;
+ margin-right: 3rem;
+ border: none;
+ background: transparent !important;
+ color: var(--dark-font-color);
+
+ &:hover {
+ background: var(--light-background) !important;
+ }
+
+ img {
+ height: 26px;
+ width: 26px;
+ margin-right: 0.25rem;
+ }
+ }
+ }
+ }
+
+ #dark-mode-button:hover {
+ background: var(--light-background);
+ }
+}
+
+@media print {
+ .navbar {
+ display: none;
+ }
+}
+
+#dark-mode-button {
+ display: flex;
+ border: none;
+ padding: 0.2rem 0.7rem 0.2rem 0.5rem;
+ border-radius: 0.35rem;
+ box-sizing: content-box;
+ cursor: pointer;
+ font-size: 1.1rem;
+ background: transparent;
+
+ &:focus {
+ outline: none;
+ }
+}
+
+@media screen and (min-width: 800px) {
+ #dark-mode-button {
+ padding: 0.95rem 0.75rem;
+ font-size: 1.2rem;
+ }
+}
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/components/_post.scss b/docs/hugo-tania/assets/sass/components/_post.scss
new file mode 100644
index 0000000..55eff00
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/components/_post.scss
@@ -0,0 +1,173 @@
+/* Post */
+
+header {
+ padding: 1.5rem 0;
+
+ h1 {
+ font-size: 2rem;
+ display: inline-block;
+ font-weight: 600;
+ margin-top: 1rem;
+ }
+
+ u {
+ display: inline-block;
+ text-decoration: none;
+ padding: 0.4rem 0;
+ }
+}
+
+.article-header {
+ padding-top: 2rem;
+ margin-bottom: 0.5rem;
+
+ .container {
+ padding-left: 0;
+ padding-right: 0;
+ }
+
+ .thumb {
+ display: flex;
+ flex-direction: column;
+ }
+
+ h1 {
+ font-weight: 700;
+ font-size: 1.8rem;
+ margin: 0;
+ }
+
+ .description {
+ font-size: 1.2rem;
+ color: var(--light-font-color);
+ font-weight: 300;
+ margin-top: 2rem;
+ margin-bottom: 0;
+ }
+}
+
+.post-meta {
+ margin-top: 1rem;
+ padding: 0;
+ color: var(--light-font-color);
+ font-size: 0.9rem;
+
+ a {
+ color: var(--font-color);
+ border-width: 0;
+ }
+
+ time {
+ margin-top: 0.2rem;
+ font-size: 0.9rem;
+ }
+
+ .tags {
+ margin-top: 0.5rem;
+
+ a {
+ text-decoration: none;
+ }
+ }
+}
+
+.article-post {
+ margin-bottom: 2rem;
+
+ a {
+ box-shadow: 0px -2px 0px rgba(189, 195, 199, 0.5) inset;
+ transition: all .3s ease;
+
+ &:hover {
+ box-shadow: 0px -10px 0px rgba(189, 195, 199, 0.7) inset;
+ }
+ }
+
+ @for $i from 1 through 6 {
+ h#{$i} {
+ .anchor {
+ stroke: var(--link-color);
+ stroke-width: 1px;
+ fill: var(--link-color);
+ font-weight: 700;
+ left: -0.25rem;
+ border-width: 0;
+ float: left;
+ line-height: 1;
+ margin-left: -20px;
+ padding-right: 4px;
+ box-shadow: none;
+ transition: none;
+
+ .icon {
+ visibility: hidden;
+ }
+ }
+
+ &:hover {
+ .anchor {
+ box-shadow: none;
+ .icon {
+ visibility: visible;
+ }
+ }
+ }
+ }
+ }
+}
+
+@media screen and (min-width: 800px) {
+ .article-post {
+ margin-bottom: 3rem;
+ }
+
+ .article-post h1,
+ .article-post h2,
+ .article-post h3,
+ .article-post h4,
+ .article-post h5 {
+ padding-top: 1rem;
+ }
+
+ .post-meta {
+ margin-top: 1.5rem;
+ padding: 1rem 0;
+ }
+
+ header h1 {
+ font-size: 3rem;
+ margin-top: 2rem;
+ }
+
+ header u {
+ background: linear-gradient(transparent 85%, #bac8ff 0);
+ }
+
+ .article-header {
+ padding-top: 3rem;
+
+ h1 {
+ padding-top: 0;
+ font-size: 2.5rem;
+ }
+
+ .thumb {
+ flex-direction: row;
+ }
+
+ .description {
+ font-size: 1.8rem;
+ line-height: 1.5;
+ }
+ }
+}
+
+@media screen and (min-width: 1100px) {
+ .article-header h1 {
+ font-size: 2.5rem;
+ }
+}
+
+.post-thumbnail {
+ display: block !important;
+}
diff --git a/docs/hugo-tania/assets/sass/components/_post_tag.scss b/docs/hugo-tania/assets/sass/components/_post_tag.scss
new file mode 100644
index 0000000..7ee6af6
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/components/_post_tag.scss
@@ -0,0 +1,26 @@
+.new-post,
+.popular-post {
+ display: inline-block;
+ color: #111;
+ padding: 0.3rem 0.4rem;
+ border-radius: 0.3rem;
+ font-size: 0.85rem;
+ margin-left: 1rem;
+}
+
+.new-post {
+ background: #d3f9d8;
+}
+
+.popular-post {
+ background: #dce6fd;
+ color: var(--heading-color);
+}
+
+@media screen and (min-width: 800px) {
+
+ .new-post,
+ .popular-post {
+ margin-bottom: 0;
+ }
+}
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/components/_posts.scss b/docs/hugo-tania/assets/sass/components/_posts.scss
new file mode 100644
index 0000000..e2456af
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/components/_posts.scss
@@ -0,0 +1,68 @@
+/* Posts */
+
+.post-row {
+ display: flex;
+ align-items: center;
+ width: 100%;
+
+ time {
+ display: block;
+ flex: 0 0 65px;
+ }
+
+ h3 {
+ flex: 1;
+ }
+}
+
+.posts .post:last-of-type a {
+ border-bottom-width: 0;
+}
+
+.post {
+ a {
+ display: flex;
+ align-items: center;
+ justify-content: stretch;
+ padding: 1rem 0;
+ border-bottom: 2px solid var(--light-background);
+
+ &:hover {
+ border-radius: 0.3rem;
+ }
+ }
+
+ h3 {
+ margin-top: 0.1rem;
+ margin-bottom: 0;
+ font-size: 1.1rem;
+ font-weight: 600;
+ }
+}
+
+
+@media screen and (min-width: 800px) {
+ .posts {
+ margin-left: -1rem;
+ margin-right: -1rem;
+ }
+
+ .post {
+ a {
+ padding: 0.75rem 1rem;
+ border-bottom-color: transparent;
+
+ &:hover {
+ background: var(--light-background);
+ }
+ }
+
+ h3 {
+ font-size: 1.3rem;
+ }
+ }
+
+ .post-row time {
+ flex: 0 0 80px;
+ }
+}
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/components/_projects.scss b/docs/hugo-tania/assets/sass/components/_projects.scss
new file mode 100644
index 0000000..5e8358a
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/components/_projects.scss
@@ -0,0 +1,58 @@
+/* Projects */
+
+.projects .project:last-of-type {
+ border-bottom-width: 0;
+}
+
+.project {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0.75rem 0;
+ border-bottom: 2px solid var(--light-background);
+
+ .icon {
+ font-size: 1.5rem;
+ width: 40px;
+ }
+
+ a {
+ display: flex;
+ align-items: center;
+ margin-bottom: 0.25rem;
+ border-width: 0;
+
+ &:hover h3 {
+ text-decoration: underline;
+ }
+
+ &.button {
+ margin-left: 1.5rem;
+ border-width: 2px;
+ }
+ }
+
+ h3 {
+ font-size: 1.2rem;
+ margin: 0;
+ }
+
+ .description {
+ font-size: 1.1rem;
+ color: var(--light-font-color);
+ }
+}
+
+@media screen and (min-width: 800px) {
+ .project {
+ border-bottom-width: 0;
+
+ h3 {
+ font-size: 1.3rem;
+ }
+
+ .description {
+ font-size: 1rem;
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/components/_side.scss b/docs/hugo-tania/assets/sass/components/_side.scss
new file mode 100644
index 0000000..f668854
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/components/_side.scss
@@ -0,0 +1,57 @@
+.side {
+ width: 200px;
+ margin: 0 auto;
+}
+
+.side-right {
+ float: right;
+ clear: right;
+ margin-right: calc(-200px - 2em);
+
+ p {
+ font-size: .9rem;
+ }
+}
+
+.note-ref {
+ cursor: pointer;
+ border: none;
+
+ &:hover {
+ border: none;
+ }
+}
+
+.bg-number {
+ background: var(--light-background);
+ font-size: .9rem;
+ color: var(--font-color);
+ text-decoration: none;
+ padding: 1px 5px;
+ border-radius: 5px;
+}
+
+@media (max-width: 1280px) {
+ .side {
+ width: 100%;
+ padding: 0 2em;
+ }
+
+ .side-right {
+ float: none;
+ clear: both;
+ margin: 1em auto;
+ background: none;
+ }
+}
+
+@media (min-width: 1280px) {
+
+ .note-ref:hover ~ .side {
+ display: inline-block;
+ position: absolute;
+ margin-left: 1rem;
+ padding: .5rem;
+ box-sizing: content-box;
+ }
+}
diff --git a/docs/hugo-tania/assets/sass/components/_suggested.scss b/docs/hugo-tania/assets/sass/components/_suggested.scss
new file mode 100644
index 0000000..631de29
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/components/_suggested.scss
@@ -0,0 +1,46 @@
+/* Suggested */
+
+.suggested {
+ flex-direction: column;
+ align-items: stretch;
+ margin-left: -1rem;
+ margin-right: -1rem;
+ padding: 0;
+
+ span {
+ font-weight: 400;
+ display: block;
+ font-size: 0.9rem;
+ color: var(--transparent-text);
+ }
+
+ a {
+ background: none;
+ margin: 0.5rem 1rem;
+ border-bottom: none;
+ transition: all 0.2s ease;
+ padding: 1.5rem;
+ border-radius: 0.35rem;
+ color: var(--heading-color);
+ border: 1px solid #eeeeee;
+
+ &:hover {
+ transform: translate3D(0, -1px, 0);
+ background: var(--light-background-hover);
+ }
+ }
+}
+
+@media screen and (min-width: 800px) {
+ .suggested {
+ flex-direction: row;
+
+ a {
+ flex: 0 0 calc(50% - 2rem);
+
+ &:first-of-type {
+ text-align: right;
+ }
+ }
+ }
+}
diff --git a/docs/hugo-tania/assets/sass/components/_table.scss b/docs/hugo-tania/assets/sass/components/_table.scss
new file mode 100644
index 0000000..b173a62
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/components/_table.scss
@@ -0,0 +1,49 @@
+/* Tables */
+
+table {
+ border-collapse: separate;
+ border-spacing: 0;
+ width: 100%;
+ max-width: 100%;
+ overflow-x: auto;
+}
+
+thead,
+tbody {
+ white-space: nowrap;
+}
+
+th {
+ border-bottom: 2px solid var(--border);
+}
+
+tfoot th {
+ border-top: 1px solid var(--border);
+}
+
+td {
+ border-bottom: 1px solid var(--border);
+}
+
+th,
+td {
+ text-align: left;
+ padding: 0.75rem;
+ hyphens: auto;
+}
+
+tbody tr:nth-child(even) {
+ background-color: var(--light-background);
+}
+
+@media screen and (min-width: 800px) {
+ table {
+ display: table;
+ border: 1px solid var(--border);
+ }
+
+ thead,
+ tbody {
+ white-space: normal;
+ }
+}
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/components/_tags.scss b/docs/hugo-tania/assets/sass/components/_tags.scss
new file mode 100644
index 0000000..2f011e9
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/components/_tags.scss
@@ -0,0 +1,74 @@
+/* Tags */
+
+.count {
+ font-weight: 700;
+ color: var(--link-color);
+}
+
+.tags {
+ display: flex !important;
+ flex-wrap: wrap;
+ align-items: center;
+ margin-left: -0.5rem;
+ margin-right: -0.5rem;
+
+ >a {
+ display: block;
+ font-weight: 500;
+ background: var(--light-background);
+ color: var(--font-color);
+ margin: 0.2rem;
+ padding: 0.5rem 0.6rem;
+ font-size: 0.8rem;
+ border-radius: 0.3rem;
+ border-bottom: 0;
+ white-space: nowrap;
+ line-height: 1;
+
+ &:hover {
+ background: var(--light-background-hover);
+ color: var(--heading-color);
+ }
+ }
+}
+
+mark {
+ background: #ffec99;
+}
+
+.utterances {
+ margin-left: -4px;
+ margin-right: -4px;
+}
+
+kbd {
+ background-color: #f7f7f7;
+ border: 2px solid rgba(0, 0, 0, 0.3);
+ border-radius: 3px;
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), inset 0 0 0 2px #fff;
+ color: #333;
+ display: inline-block;
+ font-family: Helvetica Neue, Inter, -apple-system, BlinkMacSystemFont,
+ Helvetica, Arial, sans-serif;
+ line-height: 1.4;
+ margin: 0 0.1em;
+ padding: 0.1em 0.6em;
+ text-shadow: 0 1px 0 #fff;
+ font-size: 14px;
+}
+
+#comments {
+ margin-top: 3rem;
+}
+
+#comments h2 {
+ margin: 0;
+}
+
+@media print {
+
+ .comments,
+ #comments {
+ display: none;
+ }
+}
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/components/_terms.scss b/docs/hugo-tania/assets/sass/components/_terms.scss
new file mode 100644
index 0000000..0f3b374
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/components/_terms.scss
@@ -0,0 +1,15 @@
+.terms {
+ a {
+ padding: .75rem 1.25rem;
+ margin: 0 .25rem;
+ font-size: 1.2rem;
+ font-weight: 400;
+ color: var(--font-color);
+ border-radius: .35rem;
+
+ &:hover {
+ background: var(--light-background);
+ color: var(--dark-font-color);
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/hugo-tania/assets/sass/main.scss b/docs/hugo-tania/assets/sass/main.scss
new file mode 100644
index 0000000..474b7f4
--- /dev/null
+++ b/docs/hugo-tania/assets/sass/main.scss
@@ -0,0 +1,26 @@
+@import "base/normalize";
+@import "base/reset";
+@import "base/variables";
+@import "base/grid";
+@import "base/scaffolding";
+@import "base/headings";
+@import "base/links";
+
+
+@import "components/navbar";
+@import "components/bio";
+@import "components/posts";
+@import "components/post_tag";
+@import "components/footer";
+@import "components/helpers";
+@import "components/table";
+@import "components/tags";
+
+@import "components/post";
+@import "components/highlight";
+@import "components/side";
+@import "components/suggested";
+@import "components/projects";
+@import "components/terms";
+
+@import "base/dark";
\ No newline at end of file
diff --git a/docs/hugo-tania/images/screenshot.png b/docs/hugo-tania/images/screenshot.png
new file mode 100644
index 0000000..ee96f4a
Binary files /dev/null and b/docs/hugo-tania/images/screenshot.png differ
diff --git a/docs/hugo-tania/images/tn.png b/docs/hugo-tania/images/tn.png
new file mode 100644
index 0000000..92e0035
Binary files /dev/null and b/docs/hugo-tania/images/tn.png differ
diff --git a/docs/hugo-tania/layouts/404.html b/docs/hugo-tania/layouts/404.html
new file mode 100644
index 0000000..c7d0697
--- /dev/null
+++ b/docs/hugo-tania/layouts/404.html
@@ -0,0 +1,9 @@
+{{ partial "header.html" . }}
+
+
+
+404 NOT FOUND
+
+
+
+{{ partial "footer.html" . }}
diff --git a/docs/hugo-tania/layouts/_default/archives.html b/docs/hugo-tania/layouts/_default/archives.html
new file mode 100644
index 0000000..574e329
--- /dev/null
+++ b/docs/hugo-tania/layouts/_default/archives.html
@@ -0,0 +1,41 @@
+{{ define "main" }}
+
+
+
+
{{ .Title }}
+
{{ .Params.subtitle }}
+
+
+
+{{ $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections }}
+
+
+
+
+ {{ range $pages.GroupByDate "2006" }}
+
+
+ {{ range.Pages }}
+
+ {{ end }}
+
+
+ {{ end }}
+
+
+
+
+{{ end }}
diff --git a/docs/hugo-tania/layouts/_default/baseof.html b/docs/hugo-tania/layouts/_default/baseof.html
new file mode 100644
index 0000000..4bfc30b
--- /dev/null
+++ b/docs/hugo-tania/layouts/_default/baseof.html
@@ -0,0 +1,12 @@
+
+
+ {{ partial "head.html" . }}
+
+
+ {{ partial "header.html" . }}
+
+ {{ block "main" . }}{{ end }}
+
+ {{ partial "footer.html" . }}
+
+
\ No newline at end of file
diff --git a/docs/hugo-tania/layouts/_default/index.html b/docs/hugo-tania/layouts/_default/index.html
new file mode 100644
index 0000000..844f7f6
--- /dev/null
+++ b/docs/hugo-tania/layouts/_default/index.html
@@ -0,0 +1,92 @@
+{{ define "main" }}
+
+
+
+
+ {{ with.Content }}
+ {{ . }}
+ {{ end }}
+
+
+
+
+
+{{ $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections }}
+{{ $projects := where .Site.RegularPages "Section" "projects" }}
+{{ $pages = first (default 100 .Site.Params.homePosts) (sort (where .Site.RegularPages "Type" "in" .Site.Params.mainSections) "Date" "desc") }}
+
+
+
+
+ {{ range $i,$e := $pages }}
+
+ {{if modBool $i 2}}
+
+ {{ end }}
+
+ {{ end }}
+
+
+ {{ if gt (len $projects) 0}}
+
+ Projects
+
+ {{ range $projects.ByWeight }}
+
+ {{ end }}
+
+
+ {{ end }}
+
+
+{{ end }}
diff --git a/docs/hugo-tania/layouts/_default/list.html b/docs/hugo-tania/layouts/_default/list.html
new file mode 100644
index 0000000..c1bf98d
--- /dev/null
+++ b/docs/hugo-tania/layouts/_default/list.html
@@ -0,0 +1,37 @@
+{{ define "main" }}
+
+{{ $pages := .Pages }}
+{{ $pages = (.Paginate $pages).Pages }}
+
+
+
+
+
+
+
+
+ {{ range $pages }}
+
+ {{ end }}
+
+
+
+
+
+
+{{ end }}
diff --git a/docs/hugo-tania/layouts/_default/single.html b/docs/hugo-tania/layouts/_default/single.html
new file mode 100644
index 0000000..72354a2
--- /dev/null
+++ b/docs/hugo-tania/layouts/_default/single.html
@@ -0,0 +1,55 @@
+{{ define "main" }}
+
+
+
+
+
+
+
+ {{ .Content }}
+
+
+
+
+
+
+{{ end }}
diff --git a/docs/hugo-tania/layouts/_default/terms.html b/docs/hugo-tania/layouts/_default/terms.html
new file mode 100644
index 0000000..1054cb0
--- /dev/null
+++ b/docs/hugo-tania/layouts/_default/terms.html
@@ -0,0 +1,22 @@
+{{ define "main" }}
+
+{{ $pages := .Pages }}
+{{ $pages = (.Paginate $pages).Pages }}
+
+
+
+
+
+{{ end }}
diff --git a/docs/hugo-tania/layouts/partials/footer.html b/docs/hugo-tania/layouts/partials/footer.html
new file mode 100644
index 0000000..ab04728
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/footer.html
@@ -0,0 +1,21 @@
+
\ No newline at end of file
diff --git a/docs/hugo-tania/layouts/partials/head.html b/docs/hugo-tania/layouts/partials/head.html
new file mode 100644
index 0000000..214005b
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/head.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ {{ with .Title }} {{ . }} | {{ end }}{{ .Site.Title }}
+
+
+ {{ $style := resources.Get "sass/main.scss" | toCSS | minify | fingerprint }}
+
+
\ No newline at end of file
diff --git a/docs/hugo-tania/layouts/partials/header.html b/docs/hugo-tania/layouts/partials/header.html
new file mode 100644
index 0000000..51cb88f
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/header.html
@@ -0,0 +1,22 @@
+
\ No newline at end of file
diff --git a/docs/hugo-tania/layouts/partials/svgs/social/dev-to.svg b/docs/hugo-tania/layouts/partials/svgs/social/dev-to.svg
new file mode 100644
index 0000000..b3c5a58
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/svgs/social/dev-to.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/hugo-tania/layouts/partials/svgs/social/email.svg b/docs/hugo-tania/layouts/partials/svgs/social/email.svg
new file mode 100644
index 0000000..ae33aad
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/svgs/social/email.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/hugo-tania/layouts/partials/svgs/social/facebook.svg b/docs/hugo-tania/layouts/partials/svgs/social/facebook.svg
new file mode 100644
index 0000000..8481d2d
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/svgs/social/facebook.svg
@@ -0,0 +1,5 @@
+
diff --git a/docs/hugo-tania/layouts/partials/svgs/social/github.svg b/docs/hugo-tania/layouts/partials/svgs/social/github.svg
new file mode 100644
index 0000000..5fd37b4
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/svgs/social/github.svg
@@ -0,0 +1,5 @@
+
diff --git a/docs/hugo-tania/layouts/partials/svgs/social/instagram.svg b/docs/hugo-tania/layouts/partials/svgs/social/instagram.svg
new file mode 100644
index 0000000..f3a53d9
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/svgs/social/instagram.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/hugo-tania/layouts/partials/svgs/social/linkedin.svg b/docs/hugo-tania/layouts/partials/svgs/social/linkedin.svg
new file mode 100644
index 0000000..02ff296
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/svgs/social/linkedin.svg
@@ -0,0 +1 @@
+
diff --git a/docs/hugo-tania/layouts/partials/svgs/social/medium.svg b/docs/hugo-tania/layouts/partials/svgs/social/medium.svg
new file mode 100644
index 0000000..e991b01
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/svgs/social/medium.svg
@@ -0,0 +1 @@
+
diff --git a/docs/hugo-tania/layouts/partials/svgs/social/stack-overflow.svg b/docs/hugo-tania/layouts/partials/svgs/social/stack-overflow.svg
new file mode 100644
index 0000000..015cbac
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/svgs/social/stack-overflow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/hugo-tania/layouts/partials/svgs/social/steam.svg b/docs/hugo-tania/layouts/partials/svgs/social/steam.svg
new file mode 100644
index 0000000..068dc97
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/svgs/social/steam.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/hugo-tania/layouts/partials/svgs/social/telegram.svg b/docs/hugo-tania/layouts/partials/svgs/social/telegram.svg
new file mode 100644
index 0000000..6830505
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/svgs/social/telegram.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/hugo-tania/layouts/partials/svgs/social/twitch.svg b/docs/hugo-tania/layouts/partials/svgs/social/twitch.svg
new file mode 100644
index 0000000..c750505
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/svgs/social/twitch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/hugo-tania/layouts/partials/svgs/social/twitter.svg b/docs/hugo-tania/layouts/partials/svgs/social/twitter.svg
new file mode 100644
index 0000000..224e8d8
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/svgs/social/twitter.svg
@@ -0,0 +1,5 @@
+
diff --git a/docs/hugo-tania/layouts/partials/svgs/social/whatsapp.svg b/docs/hugo-tania/layouts/partials/svgs/social/whatsapp.svg
new file mode 100644
index 0000000..e0e3da4
--- /dev/null
+++ b/docs/hugo-tania/layouts/partials/svgs/social/whatsapp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/hugo-tania/layouts/rss.xml b/docs/hugo-tania/layouts/rss.xml
new file mode 100644
index 0000000..ac5be26
--- /dev/null
+++ b/docs/hugo-tania/layouts/rss.xml
@@ -0,0 +1,27 @@
+
+
+ {{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}
+ {{ .Permalink }}
+ Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}
+ Hugo -- gohugo.io{{ with .Site.LanguageCode }}
+ {{.}}{{end}}{{ with .Site.Author.email }}
+ {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Author.email }}
+ {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Copyright }}
+ {{.}}{{end}}{{ if not .Date.IsZero }}
+ {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}{{ end }}
+
+
+ {{ range first 30 .Data.Pages }}
+ -
+ {{ .Title }}
+ {{ .Permalink }}
+ {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}
+ {{ with .Params.author }}{{.}}{{end}}
+ {{ .Permalink }}
+
+ {{ (replace .Content "" "") | html }}
+
+
+ {{ end }}
+
+
diff --git a/docs/hugo-tania/netlify.toml b/docs/hugo-tania/netlify.toml
new file mode 100644
index 0000000..b1ef5ae
--- /dev/null
+++ b/docs/hugo-tania/netlify.toml
@@ -0,0 +1,17 @@
+[build]
+ publish = "site/public"
+
+[build.environment]
+ HUGO_VERSION = "0.74.3"
+ HUGO_THEME = "repo"
+
+[context.production]
+ command = "cd site && hugo --gc --themesDir ../.. -b ${URL}"
+ [context.production.environment]
+ HUGO_ENV = "production"
+
+[context.branch-deploy]
+ command = "cd site && hugo --gc --themesDir ../.. -b ${DEPLOY_PRIME_URL}"
+
+[context.deploy-preview]
+ command = "cd site && hugo --gc --themesDir ../.. -b ${DEPLOY_PRIME_URL}"
diff --git a/docs/hugo-tania/resources/_gen/assets/scss/sass/main.scss_48b060fe05b0a273d182ef83c0605941.content b/docs/hugo-tania/resources/_gen/assets/scss/sass/main.scss_48b060fe05b0a273d182ef83c0605941.content
new file mode 100644
index 0000000..e6d9093
--- /dev/null
+++ b/docs/hugo-tania/resources/_gen/assets/scss/sass/main.scss_48b060fe05b0a273d182ef83c0605941.content
@@ -0,0 +1 @@
+/*!normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css*/html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}*,*::before,*::after{box-sizing:border-box}:root{--color-mode: light;--h1-color: #343a40;--font-color: #495057;--heading-color: #343a40;--background: white;--dark-font-color: #1b1d25;--medium-font-color: #60656c;--light-font-color: #858b93;--light-background: #f1f4f8;--light-background-hover: #e1e6ed;--border: #d6d9de;--link-color: #5183f5;--link-color-darker: #364fc7;--navbar-color: #1b1d25;--blockquote: #f9f9f9;--blockquote-left: #e3e6eb;--transparent-text: rgba(0, 0, 0, 0.7);--transparent-bg: rgba(0, 0, 0, 0.05);--light-transparent-bg: rgba(255, 255, 255, 0.1)}.flex{display:flex;align-items:center}.flex-row{display:flex;flex-direction:column}@media screen and (min-width:800px){.flex-row{flex-direction:row}}.flex-col{flex:1}.flex-two-thirds{flex:2}.justify-center{justify-content:center}html{font-family:-apple-system,BlinkMacSystemFont,helvetica neue,roboto,Roboto,Arial,noto sans,sans-serif,apple color emoji,segoe ui,segoe ui emoji,segoe ui symbol,noto color emoji;color:var(--font-color);font-weight:400;font-size:1rem;line-height:1.75}body{background:var(--background);margin:0;padding:0}section{margin:2rem 0}section:first-of-type{margin-top:0}section>h2{display:flex;align-items:center;font-size:1.6rem;margin-top:0;margin-bottom:.5rem}@media screen and (min-width:800px){section>h2{margin-bottom:2rem}}.index h2,section>h2{border-bottom-width:0}@media screen and (min-width:800px){.index h2,section>h2{border-bottom-width:4px}}a.section-button{font-weight:500;background:var(--light-background);color:var(--dark-font-color);padding:.4rem .6rem;font-size:.8rem;border-radius:.3rem;border-width:0!important;white-space:nowrap;line-height:1;margin-left:2rem;margin-top:.5rem}a.section-button:hover{background:var(--light-background-hover);color:var(--heading-color)}@media screen and (min-width:800px){section{margin:3.5rem 0}section>h2{font-size:2rem;margin:0 0 1rem}}.container{max-width:825px;padding:0 1.5rem;margin-left:auto;margin-right:auto}.container.page p{max-width:600px}@media screen and (min-width:800px){.container{padding:0 2rem}}img{display:inline-block;max-width:100%;height:auto}p,ol,ul,dl,table,blockquote{font-size:1.05rem;margin:0 0 1.5rem}ul{padding:0 1rem}@media screen and (min-width:800px){p,ol,ul,dl,table,blockquote{font-size:1.125rem}ul{padding:0 2rem}}ul li p{margin:0}ul li ul{padding-left:1rem;margin:0}ul li ul li{margin:0}ol li ol{margin-bottom:0}.task-list-item [type=checkbox]{margin-right:.5rem}blockquote{margin:2rem 0;padding:1rem;background:var(--blockquote);font-weight:400;border-left:5px solid var(--blockquote-left)}blockquote :not(pre)>code[class*=language-]{background:rgba(0,0,0,.1)!important}@media screen and (min-width:800px){blockquote{padding:2rem 0 2rem 2rem}}::selection{background:#3b5bdb;color:#fff}h1{color:var(--h1-color)}h3,h4{color:var(--medium-font-color)}h2,h5{color:var(--heading-color)}h1,h2,h3,h4,h5{margin:0 0 1.5rem;font-weight:700;line-height:1.2;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1:not(:first-child),h2:not(:first-child),h3:not(:first-child),h4:not(:first-child){margin-top:3rem}h1{font-size:2.5rem;line-height:1.1}h2{font-size:1.75rem;padding-bottom:.5rem;border-bottom:4px solid var(--light-background)}h2 code{font-size:1.75rem!important}h3{font-size:1.5rem;color:var(--font-color);font-weight:600;margin-bottom:1rem}h3 code{font-size:1.4rem!important}h4{font-size:1.3rem;color:var(--font-color);font-weight:500;margin-bottom:1rem;border-bottom:2px solid var(--light-background);padding-bottom:.25rem}h5{font-size:1.2rem;margin-bottom:1rem}@media screen and (min-width:800px){h1{font-size:3rem}h2{font-size:1.9rem}h2 code{font-size:1.9rem!important}h3{font-size:1.7rem;color:var(--font-color);font-weight:600}h3 code{font-size:1.6rem!important}h4{font-weight:400;font-size:1.4rem}}a.link{display:block;padding:.25rem 0;margin:.25rem 0;border-radius:.35rem;font-weight:600;color:var(--dark-font-color)}a.link:hover{color:var(--link-color)}a.button{display:inline-block;border:2px solid var(--link-color);padding:.3rem .6rem;margin-right:.75rem;font-weight:500;background:var(--link-color);color:#fff;border-radius:.35rem;font-size:.9rem}a.button.large{padding:.8rem 1rem;font-size:1.05rem}a.button.secondary{border:2px solid #edf2ff;background:#edf2ff;color:#3b5bdb}a.button:hover,a.button.secondary:hover{border:2px solid var(--link-color-darker);background:var(--link-color-darker);color:#fff}@media screen and (min-width:800px){a.button{font-size:.9rem}a.button.large{padding:1rem 1.5rem;font-size:1.1rem}}p.subtitle{color:var(--medium-font-color);font-size:1.3rem;font-weight:300;margin-bottom:0}@media screen and (min-width:800px){p.subtitle{font-size:1.5rem}}a{color:inherit;text-decoration:none}a.image-link{border-width:0}a code[class*=language-]{color:var(--link-color)!important}a code[class*=language-]:hover{background:var(--link-color)!important;color:#fff!important}main{margin-top:50px}@media screen and (min-width:800px){main{margin-top:0}}.emoji{margin:0 .4rem 0 .1rem}.navbar{width:100%;position:fixed;top:0;left:0;background:var(--navbar-color);box-shadow:0 3px 13px rgba(100,110,140,.1),0 2px 4px rgba(100,110,140,.15);z-index:2;padding:.5rem}.navbar .flex{justify-content:space-between}.navbar a{border-radius:.35rem;margin:0 .05rem;color:rgba(255,255,255,.65);font-weight:400;font-size:.85rem;border:1px solid transparent;padding:0 .3rem;background:0 0}.navbar a:first-of-type{margin-left:-1rem}.navbar a .emoji{display:none}.navbar a.brand{font-weight:500;color:#fff;white-space:nowrap;border:none;display:flex;align-items:center;line-height:1;background:0 0}.navbar a.brand .emoji{display:inline-block!important}.navbar a.brand img{height:22px;width:22px}.navbar button{font-size:1rem;margin-right:-1rem}@media screen and (min-width:500px){.navbar a{font-size:.95rem;padding:.5rem}}@media screen and (min-width:800px){.emoji{margin:0 .5rem 0 .1rem}.navbar{position:static;padding:1.5rem 0;background:0 0;box-shadow:none}.navbar .flex{justify-content:space-between}.navbar a{padding:.75rem 1.25rem;margin:0 .25rem;font-size:1.2rem;font-weight:400;color:var(--font-color)}.navbar a:first-of-type{margin-left:-1.5rem}.navbar a:hover,.navbar a[aria-current=page]{background:var(--light-background);color:var(--dark-font-color)}.navbar a.brand{font-size:1.3rem;margin-right:3rem;border:none;background:0 0!important;color:var(--dark-font-color)}.navbar a.brand:hover{background:var(--light-background)!important}.navbar a.brand img{height:26px;width:26px;margin-right:.25rem}#dark-mode-button:hover{background:var(--light-background)}}@media print{.navbar{display:none}}#dark-mode-button{display:flex;border:none;padding:.2rem .7rem .2rem .5rem;border-radius:.35rem;box-sizing:content-box;cursor:pointer;font-size:1.1rem;background:0 0}#dark-mode-button:focus{outline:none}@media screen and (min-width:800px){#dark-mode-button{padding:.95rem .75rem;font-size:1.2rem}}.my{padding-top:2rem}.my a{border:none;margin-right:1rem}.my a:hover{border:none}.post-row{display:flex;align-items:center;width:100%}.post-row time{display:block;flex:0 0 65px}.post-row h3{flex:1}.posts .post:last-of-type a{border-bottom-width:0}.post a{display:flex;align-items:center;justify-content:stretch;padding:1rem 0;border-bottom:2px solid var(--light-background)}.post a:hover{border-radius:.3rem}.post h3{margin-top:.1rem;margin-bottom:0;font-size:1.1rem;font-weight:600}@media screen and (min-width:800px){.posts{margin-left:-1rem;margin-right:-1rem}.post a{padding:.75rem 1rem;border-bottom-color:transparent}.post a:hover{background:var(--light-background)}.post h3{font-size:1.3rem}.post-row time{flex:0 0 80px}}.new-post,.popular-post{display:inline-block;color:#111;padding:.3rem .4rem;border-radius:.3rem;font-size:.85rem;margin-left:1rem}.new-post{background:#d3f9d8}.popular-post{background:#dce6fd;color:var(--heading-color)}@media screen and (min-width:800px){.new-post,.popular-post{margin-bottom:0}}.footer{padding:2rem 0}.footer>.flex{flex-direction:column;align-items:center;justify-content:center}.footer img{height:30px;width:30px}.footer a{border-radius:.35rem;margin:0 .05rem;font-weight:400;font-size:1rem;border:1px solid transparent;padding:.5rem;margin:0 .5rem;color:var(--light-font-color)}.footer a:hover{color:var(--heading-color);background:var(--light-background)}.footer a.img{display:flex;align-items:center;padding:0;margin:0 .75rem;background:0 0}.footer-links{display:flex;align-items:center;justify-content:center;flex-wrap:wrap}.flex nav{padding:1rem 0}@media screen and (min-width:800px){.footer>.flex{align-items:flex-start;margin-left:-1.5rem;margin-right:-1.5rem}.footer a{padding:.75rem}.footer a.img{padding:0 .5rem;margin:0 1rem}}@media print{.footer{display:none}}.small{max-width:600px}time,.meta{color:var(--light-font-color);font-size:.85rem;white-space:nowrap;font-weight:400}.meta{color:var(--medium-font-color);font-size:1rem}table{border-collapse:separate;border-spacing:0;width:100%;max-width:100%;overflow-x:auto}thead,tbody{white-space:nowrap}th{border-bottom:2px solid var(--border)}tfoot th{border-top:1px solid var(--border)}td{border-bottom:1px solid var(--border)}th,td{text-align:left;padding:.75rem;hyphens:auto}tbody tr:nth-child(even){background-color:var(--light-background)}@media screen and (min-width:800px){table{display:table;border:1px solid var(--border)}thead,tbody{white-space:normal}}.count{font-weight:700;color:var(--link-color)}.tags{display:flex!important;flex-wrap:wrap;align-items:center;margin-left:-.5rem;margin-right:-.5rem}.tags>a{display:block;font-weight:500;background:var(--light-background);color:var(--font-color);margin:.2rem;padding:.5rem .6rem;font-size:.8rem;border-radius:.3rem;border-bottom:0;white-space:nowrap;line-height:1}.tags>a:hover{background:var(--light-background-hover);color:var(--heading-color)}mark{background:#ffec99}.utterances{margin-left:-4px;margin-right:-4px}kbd{background-color:#f7f7f7;border:2px solid rgba(0,0,0,.3);border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 2px #fff;color:#333;display:inline-block;font-family:Helvetica Neue,Inter,-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;line-height:1.4;margin:0 .1em;padding:.1em .6em;text-shadow:0 1px 0 #fff;font-size:14px}#comments{margin-top:3rem}#comments h2{margin:0}@media print{.comments,#comments{display:none}}header{padding:1.5rem 0}header h1{font-size:2rem;display:inline-block;font-weight:600;margin-top:1rem}header u{display:inline-block;text-decoration:none;padding:.4rem 0}.article-header{padding-top:2rem;margin-bottom:.5rem}.article-header .container{padding-left:0;padding-right:0}.article-header .thumb{display:flex;flex-direction:column}.article-header h1{font-weight:700;font-size:1.8rem;margin:0}.article-header .description{font-size:1.2rem;color:var(--light-font-color);font-weight:300;margin-top:2rem;margin-bottom:0}.post-meta{margin-top:1rem;padding:0;color:var(--light-font-color);font-size:.9rem}.post-meta a{color:var(--font-color);border-width:0}.post-meta time{margin-top:.2rem;font-size:.9rem}.post-meta .tags{margin-top:.5rem}.post-meta .tags a{text-decoration:none}.article-post{margin-bottom:2rem}.article-post a{box-shadow:0 -2px 0 rgba(189,195,199,.5)inset;transition:all .3s ease}.article-post a:hover{box-shadow:0 -10px 0 rgba(189,195,199,.7)inset}.article-post h1 .anchor{stroke:var(--link-color);stroke-width:1px;fill:var(--link-color);font-weight:700;left:-.25rem;border-width:0;float:left;line-height:1;margin-left:-20px;padding-right:4px;box-shadow:none;transition:none}.article-post h1 .anchor .icon{visibility:hidden}.article-post h1:hover .anchor{box-shadow:none}.article-post h1:hover .anchor .icon{visibility:visible}.article-post h2 .anchor{stroke:var(--link-color);stroke-width:1px;fill:var(--link-color);font-weight:700;left:-.25rem;border-width:0;float:left;line-height:1;margin-left:-20px;padding-right:4px;box-shadow:none;transition:none}.article-post h2 .anchor .icon{visibility:hidden}.article-post h2:hover .anchor{box-shadow:none}.article-post h2:hover .anchor .icon{visibility:visible}.article-post h3 .anchor{stroke:var(--link-color);stroke-width:1px;fill:var(--link-color);font-weight:700;left:-.25rem;border-width:0;float:left;line-height:1;margin-left:-20px;padding-right:4px;box-shadow:none;transition:none}.article-post h3 .anchor .icon{visibility:hidden}.article-post h3:hover .anchor{box-shadow:none}.article-post h3:hover .anchor .icon{visibility:visible}.article-post h4 .anchor{stroke:var(--link-color);stroke-width:1px;fill:var(--link-color);font-weight:700;left:-.25rem;border-width:0;float:left;line-height:1;margin-left:-20px;padding-right:4px;box-shadow:none;transition:none}.article-post h4 .anchor .icon{visibility:hidden}.article-post h4:hover .anchor{box-shadow:none}.article-post h4:hover .anchor .icon{visibility:visible}.article-post h5 .anchor{stroke:var(--link-color);stroke-width:1px;fill:var(--link-color);font-weight:700;left:-.25rem;border-width:0;float:left;line-height:1;margin-left:-20px;padding-right:4px;box-shadow:none;transition:none}.article-post h5 .anchor .icon{visibility:hidden}.article-post h5:hover .anchor{box-shadow:none}.article-post h5:hover .anchor .icon{visibility:visible}.article-post h6 .anchor{stroke:var(--link-color);stroke-width:1px;fill:var(--link-color);font-weight:700;left:-.25rem;border-width:0;float:left;line-height:1;margin-left:-20px;padding-right:4px;box-shadow:none;transition:none}.article-post h6 .anchor .icon{visibility:hidden}.article-post h6:hover .anchor{box-shadow:none}.article-post h6:hover .anchor .icon{visibility:visible}@media screen and (min-width:800px){.article-post{margin-bottom:3rem}.article-post h1,.article-post h2,.article-post h3,.article-post h4,.article-post h5{padding-top:1rem}.post-meta{margin-top:1.5rem;padding:1rem 0}header h1{font-size:3rem;margin-top:2rem}header u{background:linear-gradient(transparent 85%,#bac8ff 0)}.article-header{padding-top:3rem}.article-header h1{padding-top:0;font-size:2.5rem}.article-header .thumb{flex-direction:row}.article-header .description{font-size:1.8rem;line-height:1.5}}@media screen and (min-width:1100px){.article-header h1{font-size:2.5rem}}.post-thumbnail{display:block!important}code,pre{font-size:.9rem;font-family:Consolas,Monaco,Menlo,dejavu sans mono,bitstream vera sans mono,courier new,monospace;background:#373b41}:not(pre)>code{color:var(--dark-font-color);background:var(--light-background)}code{padding:3px 5px;border-radius:4px;color:#f8f8f2}pre>code{display:block}.highlight>.chroma{margin:0;border-radius:5px;overflow-x:auto;box-shadow:1px 1px 2px rgba(0,0,0,.125);position:relative;background:#373b41}.highlight>.chroma code{padding:30px 10px 10px}.highlight>.chroma code[data-lang]::before{position:absolute;top:0;right:0;left:0;padding:2px 10px;width:100%;height:30px;font-size:.9rem;line-height:1.9;font-weight:700;color:#b1b1b1;background:#303339;content:attr(data-lang)}.highlight>.chroma table{position:relative;border:none}.highlight>.chroma table code{padding:0}.highlight>.chroma .lntd:first-child{width:10px}.highlight>.chroma .lntd:first-child pre{margin:0;padding:30px 7px 10px}.highlight>.chroma .lntd:last-child{vertical-align:top}.highlight>.chroma .lntd:last-child pre{margin:0;padding:30px 10px 10px}.highlight>.chroma table,.highlight>.chroma tr,.highlight>.chroma td{margin:0;padding:0;width:100%;border-collapse:collapse;border:none}.highlight>.chroma .hl{display:block;width:100%;background-color:#000}.highlight>.chroma .lnt{color:#7f7f7f}.highlight>.chroma .ln{padding:0 .4em;color:#7f7f7f}.highlight>.chroma .err{color:#960050}.highlight>.chroma .c{color:#999}.highlight>.chroma .err{color:#f2777a}.highlight>.chroma .k{color:#c9c}.highlight>.chroma .l{color:#f99157}.highlight>.chroma .n{color:#ccc}.highlight>.chroma .o{color:#6cc}.highlight>.chroma .p{color:#ccc}.highlight>.chroma .cm{color:#999}.highlight>.chroma .cp{color:#999}.highlight>.chroma .c1{color:#999}.highlight>.chroma .cs{color:#999}.highlight>.chroma .gd{color:#f2777a}.highlight>.chroma .ge{font-style:italic}.highlight>.chroma .gh{color:#ccc;font-weight:700}.highlight>.chroma .gi{color:#9c9}.highlight>.chroma .gp{color:#999;font-weight:700}.highlight>.chroma .gs{font-weight:700}.highlight>.chroma .gu{color:#6cc;font-weight:700}.highlight>.chroma .kc{color:#c9c}.highlight>.chroma .kd{color:#c9c}.highlight>.chroma .kn{color:#6cc}.highlight>.chroma .kp{color:#c9c}.highlight>.chroma .kr{color:#c9c}.highlight>.chroma .kt{color:#fc6}.highlight>.chroma .ld{color:#9c9}.highlight>.chroma .m{color:#f99157}.highlight>.chroma .s{color:#9c9}.highlight>.chroma .na{color:#69c}.highlight>.chroma .nb{color:#ccc}.highlight>.chroma .nc{color:#fc6}.highlight>.chroma .no{color:#f2777a}.highlight>.chroma .nd{color:#6cc}.highlight>.chroma .ni{color:#ccc}.highlight>.chroma .ne{color:#f2777a}.highlight>.chroma .nf{color:#69c}.highlight>.chroma .nl{color:#ccc}.highlight>.chroma .nn{color:#fc6}.highlight>.chroma .nx{color:#69c}.highlight>.chroma .py{color:#ccc}.highlight>.chroma .nt{color:#6cc}.highlight>.chroma .nv{color:#f2777a}.highlight>.chroma .ow{color:#6cc}.highlight>.chroma .w{color:#ccc}.highlight>.chroma .mf{color:#f99157}.highlight>.chroma .mh{color:#f99157}.highlight>.chroma .mi{color:#f99157}.highlight>.chroma .mo{color:#f99157}.highlight>.chroma .sb{color:#9c9}.highlight>.chroma .sc{color:#ccc}.highlight>.chroma .sd{color:#999}.highlight>.chroma .s2{color:#9c9}.highlight>.chroma .se{color:#f99157}.highlight>.chroma .sh{color:#9c9}.highlight>.chroma .si{color:#f99157}.highlight>.chroma .sx{color:#9c9}.highlight>.chroma .sr{color:#9c9}.highlight>.chroma .s1{color:#9c9}.highlight>.chroma .ss{color:#9c9}.highlight>.chroma .bp{color:#ccc}.highlight>.chroma .vc{color:#f2777a}.highlight>.chroma .vg{color:#f2777a}.highlight>.chroma .vi{color:#f2777a}.highlight>.chroma .il{color:#f99157}.side{width:200px;margin:0 auto}.side-right{float:right;clear:right;margin-right:calc(-200px - 2em)}.side-right p{font-size:.9rem}.note-ref{cursor:pointer;border:none}.note-ref:hover{border:none}.bg-number{background:var(--light-background);font-size:.9rem;color:var(--font-color);text-decoration:none;padding:1px 5px;border-radius:5px}@media(max-width:1280px){.side{width:100%;padding:0 2em}.side-right{float:none;clear:both;margin:1em auto;background:0 0}}@media(min-width:1280px){.note-ref:hover~.side{display:inline-block;position:absolute;margin-left:1rem;padding:.5rem;box-sizing:content-box}}.suggested{flex-direction:column;align-items:stretch;margin-left:-1rem;margin-right:-1rem;padding:0}.suggested span{font-weight:400;display:block;font-size:.9rem;color:var(--transparent-text)}.suggested a{background:0 0;margin:.5rem 1rem;border-bottom:none;transition:all .2s ease;padding:1.5rem;border-radius:.35rem;background:var(--light-background);color:var(--heading-color)}.suggested a:hover{transform:translate3D(0,-1px,0);background:var(--light-background-hover)}@media screen and (min-width:800px){.suggested{flex-direction:row}.suggested a{flex:0 0 calc(50% - 2rem)}.suggested a:first-of-type{text-align:right}}.projects .project:last-of-type{border-bottom-width:0}.project{display:flex;align-items:center;justify-content:space-between;padding:.75rem 0;border-bottom:2px solid var(--light-background)}.project .icon{font-size:1.5rem;width:40px}.project a{display:flex;align-items:center;margin-bottom:.25rem;border-width:0}.project a:hover h3{text-decoration:underline}.project a.button{margin-left:1.5rem;border-width:2px}.project h3{font-size:1.2rem;margin:0}.project .description{font-size:1.1rem;color:var(--light-font-color)}@media screen and (min-width:800px){.project{border-bottom-width:0}.project h3{font-size:1.3rem}.project .description{font-size:1rem}}.terms a{padding:.75rem 1.25rem;margin:0 .25rem;font-size:1.2rem;font-weight:400;color:var(--font-color);border-radius:.35rem}.terms a:hover{background:var(--light-background);color:var(--dark-font-color)}@media(prefers-color-scheme:dark){:root{--color-mode: dark}:root:not([data-user-color-scheme]){--h1-color: white;--font-color: #b3b9c5;--heading-color: #ffd479;--dark-font-color: #ced4da;--background: #1f2022;--medium-font-color: #dee2e6;--light-font-color: #868e96;--light-background: #2D2D31;--light-background-hover: #3b3b3e;--code-background-color: #2e2e30;--border: #404040;--link-color: #6ab0f3;--link-color-darker: #4a72a5;--link-hover-color: #e1a6f2;--navbar-color: #1d1d1d;--blockquote: #2b2b2b;--blockquote-left: #191919;--transparent-text: rgba(255, 255, 255, 0.7);--transparent-bg: rgba(0, 0, 0, 0.2);--light-transparent-bg: rgba(255, 255, 255, 0.05)}}[data-user-color-scheme=dark]{--h1-color: white;--font-color: #b3b9c5;--heading-color: #ffd479;--dark-font-color: #ced4da;--background: #1f2022;--medium-font-color: #dee2e6;--light-font-color: #868e96;--light-background: #2D2D31;--light-background-hover: #3b3b3e;--code-background-color: #2e2e30;--border: #404040;--link-color: #6ab0f3;--link-color-darker: #4a72a5;--link-hover-color: #e1a6f2;--navbar-color: #1d1d1d;--blockquote: #2b2b2b;--blockquote-left: #191919;--transparent-text: rgba(255, 255, 255, 0.7);--transparent-bg: rgba(0, 0, 0, 0.2);--light-transparent-bg: rgba(255, 255, 255, 0.05)}
\ No newline at end of file
diff --git a/docs/hugo-tania/resources/_gen/assets/scss/sass/main.scss_48b060fe05b0a273d182ef83c0605941.json b/docs/hugo-tania/resources/_gen/assets/scss/sass/main.scss_48b060fe05b0a273d182ef83c0605941.json
new file mode 100644
index 0000000..464a0d6
--- /dev/null
+++ b/docs/hugo-tania/resources/_gen/assets/scss/sass/main.scss_48b060fe05b0a273d182ef83c0605941.json
@@ -0,0 +1 @@
+{"Target":"sass/main.min.96090b4177a3194fa2de0860f2c55524d6582b68a41222fe4030905ef033075a.css","MediaType":"text/css","Data":{"Integrity":"sha256-lgkLQXejGU+i3ghg8sVVJNZYK2ikEiL+QDCQXvAzB1o="}}
\ No newline at end of file
diff --git a/docs/hugo-tania/site/config.yaml b/docs/hugo-tania/site/config.yaml
new file mode 100644
index 0000000..0c4be91
--- /dev/null
+++ b/docs/hugo-tania/site/config.yaml
@@ -0,0 +1,32 @@
+baseurl: 'https://services.m3o.com'
+languageCode: 'en-us'
+title: 'Micro Services'
+themesDir: '../..'
+theme: 'hugo-tania'
+summaryLength: 10
+
+params:
+ source: "https://github.com/micro/services"
+ titleEmoji: ''
+ socialOptions:
+ github:
+ twitter:
+
+menu:
+ header:
+ - name: Explore
+ url: '/explore/'
+ footer:
+ - name: '© 2020 Micro Services, Inc.'
+ url: 'https://m3o.com'
+
+markup:
+ highlight:
+ noClasses: false
+ lineNos: true
+ goldmark:
+ renderer:
+ unsafe: true
+
+permalinks:
+ post: /:filename
diff --git a/docs/hugo-tania/site/content/_index.md b/docs/hugo-tania/site/content/_index.md
new file mode 100644
index 0000000..f531b6e
--- /dev/null
+++ b/docs/hugo-tania/site/content/_index.md
@@ -0,0 +1 @@
+Explore, discover and use Micro Services.
diff --git a/docs/hugo-tania/site/content/explore.md b/docs/hugo-tania/site/content/explore.md
new file mode 100644
index 0000000..44977b8
--- /dev/null
+++ b/docs/hugo-tania/site/content/explore.md
@@ -0,0 +1,7 @@
+---
+title: Services
+subtitle: Explore Micro services API documentation, usage and specs
+date: 2020-11-26
+type: section
+layout: 'archives'
+---
diff --git a/docs/hugo-tania/theme.toml b/docs/hugo-tania/theme.toml
new file mode 100644
index 0000000..c3f4670
--- /dev/null
+++ b/docs/hugo-tania/theme.toml
@@ -0,0 +1,25 @@
+# theme.toml template for a Hugo theme
+# See https://github.com/gohugoio/hugoThemes#themetoml for an example
+
+name = "Tania"
+license = "MIT"
+licenselink = "https://github.com/WingLim/hugo-tania/blob/master/LICENSE"
+description = "A simple theme for bloggers"
+homepage = "https://hugo-tanhia.netlify.app"
+tags = [
+ "blog",
+ "responsive",
+ "light",
+ "dark"
+ ]
+features = ["darkmode"]
+min_version = "0.74.0"
+
+[author]
+ name = "WingLim"
+ homepage = "https://limxw.com"
+
+[original]
+ author = "Tania Rascia"
+ homepage = "https://www.taniarascia.com/"
+ repo = "https://github.com/taniarascia/taniarascia.com"
diff --git a/docs/skip b/docs/skip
new file mode 100644
index 0000000..e69de29
diff --git a/etas/Makefile b/etas/Makefile
index ad00a4e..6b47ca7 100644
--- a/etas/Makefile
+++ b/etas/Makefile
@@ -8,8 +8,14 @@ init:
.PHONY: proto
proto:
- protoc --proto_path=. --micro_out=. --go_out=:. proto/etas.proto
-
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/etas.proto
+ @redoc-cli bundle api-protobuf.json
+
+.PHONY: docs
+docs:
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/etas.proto
+ @redoc-cli bundle api-protobuf.json
+
.PHONY: build
build:
go build -o etas *.go
diff --git a/etas/README.md b/etas/README.md
index 8412403..1e2b181 100644
--- a/etas/README.md
+++ b/etas/README.md
@@ -1,7 +1,7 @@
-# ETAs Service
-
This is the ETAs service. It provides ETAs for single-pickup, multi-dropoff routes. It takes into account time and traffic.
+# ETAs Service
+
Current limitations:
• Only supports "Driving" (not walking, cycling)
• Does not optimize route
@@ -10,13 +10,13 @@ Current limitations:
The ETA service depends on the Google Maps API. Ensure you set the "google.maps.apikey" config value to your API key.
-```
+```shell
micro config set google.maps.apikey YOUR_API_KEY
```
Once set, run the service using `micro run github.com/micro/services/etas`.
-```bash
+```shell
$ micro call etas ETAs.Calculate $(cat example-req.json)
{
"points": {
diff --git a/etas/proto/etas.pb.go b/etas/proto/etas.pb.go
index 00815e4..c52eff0 100644
--- a/etas/proto/etas.pb.go
+++ b/etas/proto/etas.pb.go
@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.23.0
-// protoc v3.13.0
+// protoc-gen-go v1.25.0
+// protoc v3.6.1
// source: proto/etas.proto
package etas
@@ -319,10 +319,8 @@ var file_proto_etas_proto_rawDesc = []byte{
0x65, 0x54, 0x69, 0x6d, 0x65, 0x32, 0x30, 0x0a, 0x04, 0x45, 0x54, 0x41, 0x73, 0x12, 0x28, 0x0a,
0x09, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x2e, 0x65, 0x74, 0x61,
0x73, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x1a, 0x0e, 0x2e, 0x65, 0x74, 0x61, 0x73, 0x2e, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x2b, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, 0x75,
- 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x2f, 0x73, 0x65, 0x72, 0x76,
- 0x69, 0x63, 0x65, 0x73, 0x2f, 0x65, 0x74, 0x61, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b,
- 0x65, 0x74, 0x61, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0c, 0x5a, 0x0a, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x3b, 0x65, 0x74, 0x61, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/etas/proto/etas.proto b/etas/proto/etas.proto
index 8969bf1..3b8f239 100644
--- a/etas/proto/etas.proto
+++ b/etas/proto/etas.proto
@@ -1,7 +1,7 @@
syntax = "proto3";
package etas;
-option go_package = "github.com/micro/services/etas/proto;etas";
+option go_package = "proto;etas";
import "google/protobuf/timestamp.proto";
diff --git a/blog/feeds/.gitignore b/feeds/.gitignore
similarity index 100%
rename from blog/feeds/.gitignore
rename to feeds/.gitignore
diff --git a/blog/feeds/Dockerfile b/feeds/Dockerfile
similarity index 100%
rename from blog/feeds/Dockerfile
rename to feeds/Dockerfile
diff --git a/blog/feeds/Makefile b/feeds/Makefile
similarity index 62%
rename from blog/feeds/Makefile
rename to feeds/Makefile
index 50bbf2d..01a345f 100644
--- a/blog/feeds/Makefile
+++ b/feeds/Makefile
@@ -7,8 +7,13 @@ init:
go get github.com/micro/micro/v3/cmd/protoc-gen-micro
.PHONY: proto
proto:
- protoc --proto_path=. --micro_out=. --go_out=:. proto/feeds.proto
-
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/feeds.proto
+
+.PHONY: docs
+docs:
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/feeds.proto
+ @redoc-cli bundle api-feeds.json
+
.PHONY: build
build:
go build -o feeds *.go
diff --git a/blog/feeds/README.md b/feeds/README.md
similarity index 68%
rename from blog/feeds/README.md
rename to feeds/README.md
index 965ac16..53955ea 100644
--- a/blog/feeds/README.md
+++ b/feeds/README.md
@@ -1,21 +1,28 @@
+Designed to populate the posts service with RSS feeds from other blogs. Useful for migration or just to get outside content into the posts service.
+
# Feeds Service
-This is the Feeds service
+## Creating a feeed
-Generated with
+### cURL
-```
-micro new feeds
+```bash
+> curl 'https://api.m3o.com/feeds/New' \
+ -H 'micro-namespace: $yourNamespace' \
+ -H 'authorization: Bearer $yourToken' \
+ -d '{"name":"a16z", "url": "http://a16z.com/feed/"}';
+{}
```
-## Usage
+### CLI
-
-```
+```shell
micro feeds new --name="a16z" --url=http://a16z.com/feed/
```
-```
+## Querying feeded posts
+
+```shell
$ micro posts query
{
"posts": [
diff --git a/blog/feeds/generate.go b/feeds/generate.go
similarity index 100%
rename from blog/feeds/generate.go
rename to feeds/generate.go
diff --git a/blog/feeds/handler/crawl.go b/feeds/handler/crawl.go
similarity index 93%
rename from blog/feeds/handler/crawl.go
rename to feeds/handler/crawl.go
index 127165f..9178598 100644
--- a/blog/feeds/handler/crawl.go
+++ b/feeds/handler/crawl.go
@@ -9,8 +9,8 @@ import (
"github.com/SlyMarbo/rss"
log "github.com/micro/micro/v3/service/logger"
- feeds "github.com/micro/services/blog/feeds/proto"
- posts "github.com/micro/services/blog/posts/proto"
+ feeds "github.com/micro/services/feeds/proto"
+ posts "github.com/micro/services/posts/proto"
)
func (e *Feeds) fetchAll() {
diff --git a/blog/feeds/handler/feeds.go b/feeds/handler/feeds.go
similarity index 95%
rename from blog/feeds/handler/feeds.go
rename to feeds/handler/feeds.go
index 424d49e..c6e1bcf 100644
--- a/blog/feeds/handler/feeds.go
+++ b/feeds/handler/feeds.go
@@ -8,8 +8,8 @@ import (
log "github.com/micro/micro/v3/service/logger"
"github.com/micro/micro/v3/service/store"
- feeds "github.com/micro/services/blog/feeds/proto"
- posts "github.com/micro/services/blog/posts/proto"
+ feeds "github.com/micro/services/feeds/proto"
+ posts "github.com/micro/services/posts/proto"
)
type Feeds struct {
diff --git a/blog/feeds/main.go b/feeds/main.go
similarity index 73%
rename from blog/feeds/main.go
rename to feeds/main.go
index d66f411..bd7b58e 100644
--- a/blog/feeds/main.go
+++ b/feeds/main.go
@@ -1,10 +1,10 @@
package main
import (
- pb "github.com/micro/services/blog/feeds/proto"
- posts "github.com/micro/services/blog/posts/proto"
+ pb "github.com/micro/services/feeds/proto"
+ posts "github.com/micro/services/posts/proto"
- "github.com/micro/services/blog/feeds/handler"
+ "github.com/micro/services/feeds/handler"
"github.com/micro/micro/v3/service"
"github.com/micro/micro/v3/service/logger"
diff --git a/blog/feeds/micro.mu b/feeds/micro.mu
similarity index 100%
rename from blog/feeds/micro.mu
rename to feeds/micro.mu
diff --git a/feeds/proto/feeds.pb.go b/feeds/proto/feeds.pb.go
new file mode 100644
index 0000000..20deb7e
--- /dev/null
+++ b/feeds/proto/feeds.pb.go
@@ -0,0 +1,535 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.6.1
+// source: proto/feeds.proto
+
+package feeds
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ 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)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type Feed struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // rss feed name
+ // eg. a16z
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // rss feed url
+ // eg. http://a16z.com/feed/
+ Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"`
+}
+
+func (x *Feed) Reset() {
+ *x = Feed{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_feeds_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Feed) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Feed) ProtoMessage() {}
+
+func (x *Feed) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_feeds_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 Feed.ProtoReflect.Descriptor instead.
+func (*Feed) Descriptor() ([]byte, []int) {
+ return file_proto_feeds_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Feed) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *Feed) GetUrl() string {
+ if x != nil {
+ return x.Url
+ }
+ return ""
+}
+
+type Entry struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"`
+ Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"`
+ Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"`
+ Content string `protobuf:"bytes,5,opt,name=content,proto3" json:"content,omitempty"`
+ Date int64 `protobuf:"varint,6,opt,name=date,proto3" json:"date,omitempty"`
+}
+
+func (x *Entry) Reset() {
+ *x = Entry{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_feeds_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Entry) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Entry) ProtoMessage() {}
+
+func (x *Entry) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_feeds_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 Entry.ProtoReflect.Descriptor instead.
+func (*Entry) Descriptor() ([]byte, []int) {
+ return file_proto_feeds_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *Entry) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *Entry) GetDomain() string {
+ if x != nil {
+ return x.Domain
+ }
+ return ""
+}
+
+func (x *Entry) GetUrl() string {
+ if x != nil {
+ return x.Url
+ }
+ return ""
+}
+
+func (x *Entry) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *Entry) GetContent() string {
+ if x != nil {
+ return x.Content
+ }
+ return ""
+}
+
+func (x *Entry) GetDate() int64 {
+ if x != nil {
+ return x.Date
+ }
+ return 0
+}
+
+type NewRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // rss feed name
+ // eg. a16z
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // rss feed url
+ // eg. http://a16z.com/feed/
+ Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"`
+}
+
+func (x *NewRequest) Reset() {
+ *x = NewRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_feeds_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NewRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NewRequest) ProtoMessage() {}
+
+func (x *NewRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_feeds_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 NewRequest.ProtoReflect.Descriptor instead.
+func (*NewRequest) Descriptor() ([]byte, []int) {
+ return file_proto_feeds_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *NewRequest) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *NewRequest) GetUrl() string {
+ if x != nil {
+ return x.Url
+ }
+ return ""
+}
+
+type NewResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *NewResponse) Reset() {
+ *x = NewResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_feeds_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NewResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NewResponse) ProtoMessage() {}
+
+func (x *NewResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_feeds_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 NewResponse.ProtoReflect.Descriptor instead.
+func (*NewResponse) Descriptor() ([]byte, []int) {
+ return file_proto_feeds_proto_rawDescGZIP(), []int{3}
+}
+
+type EntriesRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // rss feed url
+ // eg. http://a16z.com/feed/
+ Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
+}
+
+func (x *EntriesRequest) Reset() {
+ *x = EntriesRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_feeds_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *EntriesRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EntriesRequest) ProtoMessage() {}
+
+func (x *EntriesRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_feeds_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 EntriesRequest.ProtoReflect.Descriptor instead.
+func (*EntriesRequest) Descriptor() ([]byte, []int) {
+ return file_proto_feeds_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *EntriesRequest) GetUrl() string {
+ if x != nil {
+ return x.Url
+ }
+ return ""
+}
+
+type EntriesResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Entries []*Entry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"`
+}
+
+func (x *EntriesResponse) Reset() {
+ *x = EntriesResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_feeds_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *EntriesResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EntriesResponse) ProtoMessage() {}
+
+func (x *EntriesResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_feeds_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 EntriesResponse.ProtoReflect.Descriptor instead.
+func (*EntriesResponse) Descriptor() ([]byte, []int) {
+ return file_proto_feeds_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *EntriesResponse) GetEntries() []*Entry {
+ if x != nil {
+ return x.Entries
+ }
+ return nil
+}
+
+var File_proto_feeds_proto protoreflect.FileDescriptor
+
+var file_proto_feeds_proto_rawDesc = []byte{
+ 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x66, 0x65, 0x65, 0x64, 0x73, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x66, 0x65, 0x65, 0x64, 0x73, 0x22, 0x2c, 0x0a, 0x04, 0x46, 0x65,
+ 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x85, 0x01, 0x0a, 0x05, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
+ 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72,
+ 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05,
+ 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04,
+ 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x64, 0x61, 0x74, 0x65,
+ 0x22, 0x32, 0x0a, 0x0a, 0x4e, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12,
+ 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
+ 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x75, 0x72, 0x6c, 0x22, 0x0d, 0x0a, 0x0b, 0x4e, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x22, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x39, 0x0a, 0x0f, 0x45, 0x6e, 0x74, 0x72, 0x69,
+ 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x07, 0x65, 0x6e,
+ 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x66, 0x65,
+ 0x65, 0x64, 0x73, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69,
+ 0x65, 0x73, 0x32, 0x73, 0x0a, 0x05, 0x46, 0x65, 0x65, 0x64, 0x73, 0x12, 0x2e, 0x0a, 0x03, 0x4e,
+ 0x65, 0x77, 0x12, 0x11, 0x2e, 0x66, 0x65, 0x65, 0x64, 0x73, 0x2e, 0x4e, 0x65, 0x77, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x66, 0x65, 0x65, 0x64, 0x73, 0x2e, 0x4e, 0x65,
+ 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x07, 0x45,
+ 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x15, 0x2e, 0x66, 0x65, 0x65, 0x64, 0x73, 0x2e, 0x45,
+ 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e,
+ 0x66, 0x65, 0x65, 0x64, 0x73, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0d, 0x5a, 0x0b, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x3b, 0x66, 0x65, 0x65, 0x64, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_proto_feeds_proto_rawDescOnce sync.Once
+ file_proto_feeds_proto_rawDescData = file_proto_feeds_proto_rawDesc
+)
+
+func file_proto_feeds_proto_rawDescGZIP() []byte {
+ file_proto_feeds_proto_rawDescOnce.Do(func() {
+ file_proto_feeds_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_feeds_proto_rawDescData)
+ })
+ return file_proto_feeds_proto_rawDescData
+}
+
+var file_proto_feeds_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
+var file_proto_feeds_proto_goTypes = []interface{}{
+ (*Feed)(nil), // 0: feeds.Feed
+ (*Entry)(nil), // 1: feeds.Entry
+ (*NewRequest)(nil), // 2: feeds.NewRequest
+ (*NewResponse)(nil), // 3: feeds.NewResponse
+ (*EntriesRequest)(nil), // 4: feeds.EntriesRequest
+ (*EntriesResponse)(nil), // 5: feeds.EntriesResponse
+}
+var file_proto_feeds_proto_depIdxs = []int32{
+ 1, // 0: feeds.EntriesResponse.entries:type_name -> feeds.Entry
+ 2, // 1: feeds.Feeds.New:input_type -> feeds.NewRequest
+ 4, // 2: feeds.Feeds.Entries:input_type -> feeds.EntriesRequest
+ 3, // 3: feeds.Feeds.New:output_type -> feeds.NewResponse
+ 5, // 4: feeds.Feeds.Entries:output_type -> feeds.EntriesResponse
+ 3, // [3:5] is the sub-list for method output_type
+ 1, // [1:3] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_proto_feeds_proto_init() }
+func file_proto_feeds_proto_init() {
+ if File_proto_feeds_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_proto_feeds_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Feed); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_feeds_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Entry); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_feeds_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NewRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_feeds_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NewResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_feeds_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*EntriesRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_feeds_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*EntriesResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_proto_feeds_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 6,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_proto_feeds_proto_goTypes,
+ DependencyIndexes: file_proto_feeds_proto_depIdxs,
+ MessageInfos: file_proto_feeds_proto_msgTypes,
+ }.Build()
+ File_proto_feeds_proto = out.File
+ file_proto_feeds_proto_rawDesc = nil
+ file_proto_feeds_proto_goTypes = nil
+ file_proto_feeds_proto_depIdxs = nil
+}
diff --git a/blog/feeds/proto/feeds.pb.micro.go b/feeds/proto/feeds.pb.micro.go
similarity index 100%
rename from blog/feeds/proto/feeds.pb.micro.go
rename to feeds/proto/feeds.pb.micro.go
diff --git a/blog/feeds/proto/feeds.proto b/feeds/proto/feeds.proto
similarity index 78%
rename from blog/feeds/proto/feeds.proto
rename to feeds/proto/feeds.proto
index 6e06415..14321f1 100644
--- a/blog/feeds/proto/feeds.proto
+++ b/feeds/proto/feeds.proto
@@ -11,8 +11,10 @@ service Feeds {
message Feed {
// rss feed name
+ // eg. a16z
string name = 1;
// rss feed url
+ // eg. http://a16z.com/feed/
string url = 2;
}
@@ -26,7 +28,11 @@ message Entry {
}
message NewRequest {
+ // rss feed name
+ // eg. a16z
string name = 1;
+ // rss feed url
+ // eg. http://a16z.com/feed/
string url = 2;
}
@@ -34,6 +40,8 @@ message NewResponse {
}
message EntriesRequest {
+ // rss feed url
+ // eg. http://a16z.com/feed/
string url = 1;
}
diff --git a/geocoding/Makefile b/geocoding/Makefile
index d14da10..8c1c83c 100644
--- a/geocoding/Makefile
+++ b/geocoding/Makefile
@@ -7,8 +7,13 @@ init:
go get github.com/micro/micro/v3/cmd/protoc-gen-micro
.PHONY: proto
proto:
- protoc --proto_path=. --micro_out=. --go_out=:. proto/geocoding.proto
-
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/geocoding.proto
+
+.PHONY: docs
+docs:
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/geocoding.proto
+ @redoc-cli bundle api-protobuf.json
+
.PHONY: build
build:
go build -o geocoding *.go
diff --git a/geocoding/README.md b/geocoding/README.md
index a1a548d..7abde71 100644
--- a/geocoding/README.md
+++ b/geocoding/README.md
@@ -1,3 +1,5 @@
-# Geocoding Service
-
The geocoding service provides address to lat lng geocoding as well as the reverse.
+
+# Geocoding service
+
+Examples coming soon. Check the [proto](https://github.com/micro/services/blob/master/geocoding/proto/geocoding.proto) for more details.
\ No newline at end of file
diff --git a/geocoding/proto/geocoding.pb.go b/geocoding/proto/geocoding.pb.go
index 611d134..b33beb2 100644
--- a/geocoding/proto/geocoding.pb.go
+++ b/geocoding/proto/geocoding.pb.go
@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.23.0
-// protoc v3.13.0
+// protoc-gen-go v1.25.0
+// protoc v3.6.1
// source: proto/geocoding.proto
package geocoding
@@ -211,8 +211,9 @@ var file_proto_geocoding_proto_rawDesc = []byte{
0x12, 0x37, 0x0a, 0x07, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x65,
0x6f, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61,
0x74, 0x65, 0x73, 0x1a, 0x12, 0x2e, 0x67, 0x65, 0x6f, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x2e,
- 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x33,
+ 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x00, 0x42, 0x11, 0x5a, 0x0f, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x3b, 0x67, 0x65, 0x6f, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/geocoding/proto/geocoding.proto b/geocoding/proto/geocoding.proto
index 6f10ece..ebab954 100644
--- a/geocoding/proto/geocoding.proto
+++ b/geocoding/proto/geocoding.proto
@@ -1,6 +1,7 @@
syntax = "proto3";
package geocoding;
+option go_package = "proto;geocoding";
import "google/protobuf/wrappers.proto";
diff --git a/go.mod b/go.mod
index 28249c9..b33e9b0 100644
--- a/go.mod
+++ b/go.mod
@@ -11,6 +11,7 @@ require (
github.com/micro/dev v0.0.0-20201117163752-d3cfc9788dfa
github.com/micro/micro/v3 v3.0.5-0.20201219085254-c8ea24387d19
github.com/miekg/dns v1.1.31 // indirect
+ github.com/stoewer/go-strcase v1.2.0 // indirect
github.com/stretchr/testify v1.6.1
github.com/ulikunitz/xz v0.5.8 // indirect
golang.org/x/crypto v0.0.0-20201002094018-c90954cbb977
diff --git a/go.sum b/go.sum
index 30d1501..90103f6 100644
--- a/go.sum
+++ b/go.sum
@@ -112,7 +112,9 @@ github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/getkin/kin-openapi v0.26.0 h1:xKIW5Z5wAfutxGBH+rr9qu0Ywfb/E1bPWkYLKRYfEuU=
github.com/getkin/kin-openapi v0.26.0/go.mod h1:WGRs2ZMM1Q8LR1QBEwUxC6RJEfaBcD0s+pcEVXFuAjw=
+github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-acme/lego/v3 v3.4.0/go.mod h1:xYbLDuxq3Hy4bMUT1t9JIuz6GWIWb3m5X+TeTHYaT7M=
github.com/go-cmd/cmd v1.0.5/go.mod h1:y8q8qlK5wQibcw63djSl/ntiHUHXHGdCkPk0j4QeW4s=
@@ -429,6 +431,8 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd
github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU=
+github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
diff --git a/helloworld/Makefile b/helloworld/Makefile
index 88ef0e7..e2847e6 100644
--- a/helloworld/Makefile
+++ b/helloworld/Makefile
@@ -4,7 +4,12 @@ GOPATH:=$(shell go env GOPATH)
.PHONY: proto
proto:
- protoc --proto_path=${GOPATH}/src:. --micro_out=. --go_out=. proto/helloworld/helloworld.proto
+ protoc --openapi_out=. --proto_path=${GOPATH}/src:. --micro_out=. --go_out=. proto/helloworld/helloworld.proto
+
+.PHONY: docs
+docs:
+ protoc --openapi_out=. --proto_path=${GOPATH}/src:. --micro_out=. --go_out=. proto/helloworld/helloworld.proto
+ @redoc-cli bundle api-protobuf.json
.PHONY: build
build: proto
diff --git a/helloworld/proto/helloworld.proto b/helloworld/proto/helloworld.proto
index c868bf8..44c2aae 100644
--- a/helloworld/proto/helloworld.proto
+++ b/helloworld/proto/helloworld.proto
@@ -1,6 +1,7 @@
syntax = "proto3";
package helloworld;
+option go_package = "proto;helloworld";
service Helloworld {
rpc Call(Request) returns (Response) {}
diff --git a/helloworld/skip b/helloworld/skip
new file mode 100644
index 0000000..e69de29
diff --git a/location/Makefile b/location/Makefile
index dd68854..7fe0372 100644
--- a/location/Makefile
+++ b/location/Makefile
@@ -7,8 +7,13 @@ init:
go get github.com/micro/micro/v3/cmd/protoc-gen-micro
.PHONY: proto
proto:
- protoc --proto_path=. --micro_out=. --go_out=:. proto/location.proto
-
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/location.proto
+
+.PHONY: docs
+docs:
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/location.proto
+ @redoc-cli bundle api-location.json
+
.PHONY: build
build:
go build -o location *.go
diff --git a/location/proto/location.pb.go b/location/proto/location.pb.go
index ffbe67f..8ae7b23 100644
--- a/location/proto/location.pb.go
+++ b/location/proto/location.pb.go
@@ -1,421 +1,674 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.6.1
// source: proto/location.proto
+// The location service stores GPS points for tracking purposes
+// and provides endpoints to query those points.
+
package location
import (
- fmt "fmt"
proto "github.com/golang/protobuf/proto"
- math "math"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
)
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
+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)
+)
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+// A point is a GPS coordinate.
type Point struct {
- Latitude float64 `protobuf:"fixed64,1,opt,name=latitude,proto3" json:"latitude,omitempty"`
- Longitude float64 `protobuf:"fixed64,2,opt,name=longitude,proto3" json:"longitude,omitempty"`
- Timestamp int64 `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Latitude float64 `protobuf:"fixed64,1,opt,name=latitude,proto3" json:"latitude,omitempty"`
+ Longitude float64 `protobuf:"fixed64,2,opt,name=longitude,proto3" json:"longitude,omitempty"`
+ Timestamp int64 `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
}
-func (m *Point) Reset() { *m = Point{} }
-func (m *Point) String() string { return proto.CompactTextString(m) }
-func (*Point) ProtoMessage() {}
+func (x *Point) Reset() {
+ *x = Point{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_location_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Point) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Point) ProtoMessage() {}
+
+func (x *Point) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_location_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 Point.ProtoReflect.Descriptor instead.
func (*Point) Descriptor() ([]byte, []int) {
- return fileDescriptor_1d9f8c6d814f264b, []int{0}
+ return file_proto_location_proto_rawDescGZIP(), []int{0}
}
-func (m *Point) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_Point.Unmarshal(m, b)
-}
-func (m *Point) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_Point.Marshal(b, m, deterministic)
-}
-func (m *Point) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Point.Merge(m, src)
-}
-func (m *Point) XXX_Size() int {
- return xxx_messageInfo_Point.Size(m)
-}
-func (m *Point) XXX_DiscardUnknown() {
- xxx_messageInfo_Point.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Point proto.InternalMessageInfo
-
-func (m *Point) GetLatitude() float64 {
- if m != nil {
- return m.Latitude
+func (x *Point) GetLatitude() float64 {
+ if x != nil {
+ return x.Latitude
}
return 0
}
-func (m *Point) GetLongitude() float64 {
- if m != nil {
- return m.Longitude
+func (x *Point) GetLongitude() float64 {
+ if x != nil {
+ return x.Longitude
}
return 0
}
-func (m *Point) GetTimestamp() int64 {
- if m != nil {
- return m.Timestamp
+func (x *Point) GetTimestamp() int64 {
+ if x != nil {
+ return x.Timestamp
}
return 0
}
type Entity struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
- Location *Point `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
+ Location *Point `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"`
}
-func (m *Entity) Reset() { *m = Entity{} }
-func (m *Entity) String() string { return proto.CompactTextString(m) }
-func (*Entity) ProtoMessage() {}
+func (x *Entity) Reset() {
+ *x = Entity{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_location_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Entity) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Entity) ProtoMessage() {}
+
+func (x *Entity) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_location_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 Entity.ProtoReflect.Descriptor instead.
func (*Entity) Descriptor() ([]byte, []int) {
- return fileDescriptor_1d9f8c6d814f264b, []int{1}
+ return file_proto_location_proto_rawDescGZIP(), []int{1}
}
-func (m *Entity) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_Entity.Unmarshal(m, b)
-}
-func (m *Entity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_Entity.Marshal(b, m, deterministic)
-}
-func (m *Entity) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Entity.Merge(m, src)
-}
-func (m *Entity) XXX_Size() int {
- return xxx_messageInfo_Entity.Size(m)
-}
-func (m *Entity) XXX_DiscardUnknown() {
- xxx_messageInfo_Entity.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Entity proto.InternalMessageInfo
-
-func (m *Entity) GetId() string {
- if m != nil {
- return m.Id
+func (x *Entity) GetId() string {
+ if x != nil {
+ return x.Id
}
return ""
}
-func (m *Entity) GetType() string {
- if m != nil {
- return m.Type
+func (x *Entity) GetType() string {
+ if x != nil {
+ return x.Type
}
return ""
}
-func (m *Entity) GetLocation() *Point {
- if m != nil {
- return m.Location
+func (x *Entity) GetLocation() *Point {
+ if x != nil {
+ return x.Location
}
return nil
}
type ReadRequest struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
}
-func (m *ReadRequest) Reset() { *m = ReadRequest{} }
-func (m *ReadRequest) String() string { return proto.CompactTextString(m) }
-func (*ReadRequest) ProtoMessage() {}
+func (x *ReadRequest) Reset() {
+ *x = ReadRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_location_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ReadRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReadRequest) ProtoMessage() {}
+
+func (x *ReadRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_location_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 ReadRequest.ProtoReflect.Descriptor instead.
func (*ReadRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_1d9f8c6d814f264b, []int{2}
+ return file_proto_location_proto_rawDescGZIP(), []int{2}
}
-func (m *ReadRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ReadRequest.Unmarshal(m, b)
-}
-func (m *ReadRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ReadRequest.Marshal(b, m, deterministic)
-}
-func (m *ReadRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ReadRequest.Merge(m, src)
-}
-func (m *ReadRequest) XXX_Size() int {
- return xxx_messageInfo_ReadRequest.Size(m)
-}
-func (m *ReadRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_ReadRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ReadRequest proto.InternalMessageInfo
-
-func (m *ReadRequest) GetId() string {
- if m != nil {
- return m.Id
+func (x *ReadRequest) GetId() string {
+ if x != nil {
+ return x.Id
}
return ""
}
type ReadResponse struct {
- Entity *Entity `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Entity *Entity `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"`
}
-func (m *ReadResponse) Reset() { *m = ReadResponse{} }
-func (m *ReadResponse) String() string { return proto.CompactTextString(m) }
-func (*ReadResponse) ProtoMessage() {}
+func (x *ReadResponse) Reset() {
+ *x = ReadResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_location_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ReadResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReadResponse) ProtoMessage() {}
+
+func (x *ReadResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_location_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 ReadResponse.ProtoReflect.Descriptor instead.
func (*ReadResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_1d9f8c6d814f264b, []int{3}
+ return file_proto_location_proto_rawDescGZIP(), []int{3}
}
-func (m *ReadResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ReadResponse.Unmarshal(m, b)
-}
-func (m *ReadResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ReadResponse.Marshal(b, m, deterministic)
-}
-func (m *ReadResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ReadResponse.Merge(m, src)
-}
-func (m *ReadResponse) XXX_Size() int {
- return xxx_messageInfo_ReadResponse.Size(m)
-}
-func (m *ReadResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_ReadResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ReadResponse proto.InternalMessageInfo
-
-func (m *ReadResponse) GetEntity() *Entity {
- if m != nil {
- return m.Entity
+func (x *ReadResponse) GetEntity() *Entity {
+ if x != nil {
+ return x.Entity
}
return nil
}
type SaveRequest struct {
- Entity *Entity `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Entity *Entity `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"`
}
-func (m *SaveRequest) Reset() { *m = SaveRequest{} }
-func (m *SaveRequest) String() string { return proto.CompactTextString(m) }
-func (*SaveRequest) ProtoMessage() {}
+func (x *SaveRequest) Reset() {
+ *x = SaveRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_location_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SaveRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SaveRequest) ProtoMessage() {}
+
+func (x *SaveRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_location_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 SaveRequest.ProtoReflect.Descriptor instead.
func (*SaveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_1d9f8c6d814f264b, []int{4}
+ return file_proto_location_proto_rawDescGZIP(), []int{4}
}
-func (m *SaveRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_SaveRequest.Unmarshal(m, b)
-}
-func (m *SaveRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_SaveRequest.Marshal(b, m, deterministic)
-}
-func (m *SaveRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_SaveRequest.Merge(m, src)
-}
-func (m *SaveRequest) XXX_Size() int {
- return xxx_messageInfo_SaveRequest.Size(m)
-}
-func (m *SaveRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_SaveRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SaveRequest proto.InternalMessageInfo
-
-func (m *SaveRequest) GetEntity() *Entity {
- if m != nil {
- return m.Entity
+func (x *SaveRequest) GetEntity() *Entity {
+ if x != nil {
+ return x.Entity
}
return nil
}
type SaveResponse struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
}
-func (m *SaveResponse) Reset() { *m = SaveResponse{} }
-func (m *SaveResponse) String() string { return proto.CompactTextString(m) }
-func (*SaveResponse) ProtoMessage() {}
+func (x *SaveResponse) Reset() {
+ *x = SaveResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_location_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SaveResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SaveResponse) ProtoMessage() {}
+
+func (x *SaveResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_location_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 SaveResponse.ProtoReflect.Descriptor instead.
func (*SaveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_1d9f8c6d814f264b, []int{5}
+ return file_proto_location_proto_rawDescGZIP(), []int{5}
}
-func (m *SaveResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_SaveResponse.Unmarshal(m, b)
-}
-func (m *SaveResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_SaveResponse.Marshal(b, m, deterministic)
-}
-func (m *SaveResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_SaveResponse.Merge(m, src)
-}
-func (m *SaveResponse) XXX_Size() int {
- return xxx_messageInfo_SaveResponse.Size(m)
-}
-func (m *SaveResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_SaveResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SaveResponse proto.InternalMessageInfo
-
type SearchRequest struct {
- Center *Point `protobuf:"bytes,1,opt,name=center,proto3" json:"center,omitempty"`
- Radius float64 `protobuf:"fixed64,2,opt,name=radius,proto3" json:"radius,omitempty"`
- Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"`
- NumEntities int64 `protobuf:"varint,4,opt,name=numEntities,proto3" json:"numEntities,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Center *Point `protobuf:"bytes,1,opt,name=center,proto3" json:"center,omitempty"`
+ // in meters
+ Radius float64 `protobuf:"fixed64,2,opt,name=radius,proto3" json:"radius,omitempty"`
+ Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"`
+ NumEntities int64 `protobuf:"varint,4,opt,name=numEntities,proto3" json:"numEntities,omitempty"`
}
-func (m *SearchRequest) Reset() { *m = SearchRequest{} }
-func (m *SearchRequest) String() string { return proto.CompactTextString(m) }
-func (*SearchRequest) ProtoMessage() {}
+func (x *SearchRequest) Reset() {
+ *x = SearchRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_location_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SearchRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SearchRequest) ProtoMessage() {}
+
+func (x *SearchRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_location_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 SearchRequest.ProtoReflect.Descriptor instead.
func (*SearchRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_1d9f8c6d814f264b, []int{6}
+ return file_proto_location_proto_rawDescGZIP(), []int{6}
}
-func (m *SearchRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_SearchRequest.Unmarshal(m, b)
-}
-func (m *SearchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_SearchRequest.Marshal(b, m, deterministic)
-}
-func (m *SearchRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_SearchRequest.Merge(m, src)
-}
-func (m *SearchRequest) XXX_Size() int {
- return xxx_messageInfo_SearchRequest.Size(m)
-}
-func (m *SearchRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_SearchRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SearchRequest proto.InternalMessageInfo
-
-func (m *SearchRequest) GetCenter() *Point {
- if m != nil {
- return m.Center
+func (x *SearchRequest) GetCenter() *Point {
+ if x != nil {
+ return x.Center
}
return nil
}
-func (m *SearchRequest) GetRadius() float64 {
- if m != nil {
- return m.Radius
+func (x *SearchRequest) GetRadius() float64 {
+ if x != nil {
+ return x.Radius
}
return 0
}
-func (m *SearchRequest) GetType() string {
- if m != nil {
- return m.Type
+func (x *SearchRequest) GetType() string {
+ if x != nil {
+ return x.Type
}
return ""
}
-func (m *SearchRequest) GetNumEntities() int64 {
- if m != nil {
- return m.NumEntities
+func (x *SearchRequest) GetNumEntities() int64 {
+ if x != nil {
+ return x.NumEntities
}
return 0
}
type SearchResponse struct {
- Entities []*Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Entities []*Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"`
}
-func (m *SearchResponse) Reset() { *m = SearchResponse{} }
-func (m *SearchResponse) String() string { return proto.CompactTextString(m) }
-func (*SearchResponse) ProtoMessage() {}
+func (x *SearchResponse) Reset() {
+ *x = SearchResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_location_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SearchResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SearchResponse) ProtoMessage() {}
+
+func (x *SearchResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_location_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 SearchResponse.ProtoReflect.Descriptor instead.
func (*SearchResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_1d9f8c6d814f264b, []int{7}
+ return file_proto_location_proto_rawDescGZIP(), []int{7}
}
-func (m *SearchResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_SearchResponse.Unmarshal(m, b)
-}
-func (m *SearchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_SearchResponse.Marshal(b, m, deterministic)
-}
-func (m *SearchResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_SearchResponse.Merge(m, src)
-}
-func (m *SearchResponse) XXX_Size() int {
- return xxx_messageInfo_SearchResponse.Size(m)
-}
-func (m *SearchResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_SearchResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SearchResponse proto.InternalMessageInfo
-
-func (m *SearchResponse) GetEntities() []*Entity {
- if m != nil {
- return m.Entities
+func (x *SearchResponse) GetEntities() []*Entity {
+ if x != nil {
+ return x.Entities
}
return nil
}
-func init() {
- proto.RegisterType((*Point)(nil), "location.Point")
- proto.RegisterType((*Entity)(nil), "location.Entity")
- proto.RegisterType((*ReadRequest)(nil), "location.ReadRequest")
- proto.RegisterType((*ReadResponse)(nil), "location.ReadResponse")
- proto.RegisterType((*SaveRequest)(nil), "location.SaveRequest")
- proto.RegisterType((*SaveResponse)(nil), "location.SaveResponse")
- proto.RegisterType((*SearchRequest)(nil), "location.SearchRequest")
- proto.RegisterType((*SearchResponse)(nil), "location.SearchResponse")
+var File_proto_location_proto protoreflect.FileDescriptor
+
+var file_proto_location_proto_rawDesc = []byte{
+ 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x22, 0x5f, 0x0a, 0x05, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x74,
+ 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6c, 0x61, 0x74,
+ 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75,
+ 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74,
+ 0x75, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+ 0x70, 0x22, 0x59, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74,
+ 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12,
+ 0x2b, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x0f, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x69,
+ 0x6e, 0x74, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1d, 0x0a, 0x0b,
+ 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x38, 0x0a, 0x0c, 0x52,
+ 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6c, 0x6f,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x37, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x0e,
+ 0x0a, 0x0c, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x86,
+ 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x27, 0x0a, 0x06, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x0f, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x69, 0x6e,
+ 0x74, 0x52, 0x06, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x64,
+ 0x69, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75,
+ 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x69,
+ 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x45,
+ 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3e, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63,
+ 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6c, 0x6f,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x32, 0xbb, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x15, 0x2e, 0x6c,
+ 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52,
+ 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a,
+ 0x04, 0x53, 0x61, 0x76, 0x65, 0x12, 0x15, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6c,
+ 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x06, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
+ 0x12, 0x17, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72,
+ 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6c, 0x6f, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x10, 0x5a, 0x0e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x6c,
+ 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
-func init() { proto.RegisterFile("proto/location.proto", fileDescriptor_1d9f8c6d814f264b) }
+var (
+ file_proto_location_proto_rawDescOnce sync.Once
+ file_proto_location_proto_rawDescData = file_proto_location_proto_rawDesc
+)
-var fileDescriptor_1d9f8c6d814f264b = []byte{
- // 366 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xb1, 0x4e, 0xf3, 0x30,
- 0x14, 0x85, 0xeb, 0xa6, 0x7f, 0x94, 0xde, 0xf4, 0x2f, 0xc8, 0x82, 0x12, 0x55, 0x20, 0x45, 0x59,
- 0xa8, 0x04, 0x2a, 0x52, 0x19, 0xca, 0x02, 0x1b, 0x1b, 0x03, 0x72, 0x27, 0x26, 0x64, 0x1a, 0x0b,
- 0x2c, 0x35, 0x76, 0x48, 0x1c, 0xa4, 0xbe, 0x00, 0x2f, 0xc5, 0xcb, 0xa1, 0xd8, 0x4e, 0x62, 0x5a,
- 0x06, 0xb6, 0xde, 0x7b, 0x7c, 0x4e, 0x8f, 0x3f, 0x07, 0x8e, 0xf2, 0x42, 0x2a, 0x79, 0xb5, 0x91,
- 0x6b, 0xaa, 0xb8, 0x14, 0x73, 0x3d, 0xe2, 0xa0, 0x99, 0x93, 0x67, 0xf8, 0xf7, 0x28, 0xb9, 0x50,
- 0x78, 0x0a, 0xc1, 0x86, 0x2a, 0xae, 0xaa, 0x94, 0x45, 0x28, 0x46, 0x33, 0x44, 0xda, 0x19, 0x9f,
- 0xc2, 0x70, 0x23, 0xc5, 0xab, 0x11, 0xfb, 0x5a, 0xec, 0x16, 0xb5, 0xaa, 0x78, 0xc6, 0x4a, 0x45,
- 0xb3, 0x3c, 0xf2, 0x62, 0x34, 0xf3, 0x48, 0xb7, 0x48, 0x9e, 0xc0, 0xbf, 0x17, 0x8a, 0xab, 0x2d,
- 0x1e, 0x43, 0x9f, 0xa7, 0x3a, 0x7b, 0x48, 0xfa, 0x3c, 0xc5, 0x18, 0x06, 0x6a, 0x9b, 0x9b, 0xc0,
- 0x21, 0xd1, 0xbf, 0xf1, 0x05, 0xb4, 0xd5, 0x74, 0x54, 0xb8, 0x38, 0x98, 0xb7, 0xdd, 0x75, 0x51,
- 0xd2, 0x75, 0x3f, 0x83, 0x90, 0x30, 0x9a, 0x12, 0xf6, 0x5e, 0xb1, 0x52, 0xed, 0xe6, 0x27, 0x37,
- 0x30, 0x32, 0x72, 0x99, 0x4b, 0x51, 0x32, 0x3c, 0x03, 0x9f, 0xe9, 0x26, 0xfa, 0x4c, 0xb8, 0x38,
- 0xec, 0x92, 0x4d, 0x43, 0x62, 0xf5, 0x64, 0x09, 0xe1, 0x8a, 0x7e, 0xb0, 0x26, 0xf8, 0xef, 0xc6,
- 0x31, 0x8c, 0x8c, 0xd1, 0xfc, 0x65, 0xf2, 0x89, 0xe0, 0xff, 0x8a, 0xd1, 0x62, 0xfd, 0xd6, 0x64,
- 0x9d, 0x83, 0xbf, 0x66, 0x42, 0xb1, 0xc2, 0x66, 0xed, 0x5d, 0xcf, 0xca, 0x78, 0x02, 0x7e, 0x41,
- 0x53, 0x5e, 0x95, 0x16, 0xb8, 0x9d, 0x5a, 0x6a, 0x9e, 0x43, 0x2d, 0x86, 0x50, 0x54, 0x99, 0xee,
- 0xc2, 0x59, 0x19, 0x0d, 0xf4, 0x1b, 0xb8, 0xab, 0xe4, 0x0e, 0xc6, 0x4d, 0x0f, 0x4b, 0xe3, 0x12,
- 0x02, 0xd6, 0x18, 0x50, 0xec, 0xfd, 0x7a, 0xad, 0xf6, 0xc4, 0xe2, 0x0b, 0x41, 0xf0, 0x60, 0x55,
- 0xbc, 0x84, 0x41, 0x0d, 0x16, 0x1f, 0x77, 0x06, 0xe7, 0x1d, 0xa6, 0x93, 0xdd, 0xb5, 0x85, 0xd1,
- 0xab, 0x8d, 0x35, 0x1e, 0xd7, 0xe8, 0x70, 0x76, 0x8d, 0x3f, 0x28, 0xf6, 0xf0, 0x2d, 0xf8, 0xa6,
- 0x3e, 0x3e, 0x71, 0xce, 0xb8, 0x60, 0xa7, 0xd1, 0xbe, 0xd0, 0xd8, 0x5f, 0x7c, 0xfd, 0xd5, 0x5f,
- 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x84, 0x35, 0x27, 0xbf, 0x0d, 0x03, 0x00, 0x00,
+func file_proto_location_proto_rawDescGZIP() []byte {
+ file_proto_location_proto_rawDescOnce.Do(func() {
+ file_proto_location_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_location_proto_rawDescData)
+ })
+ return file_proto_location_proto_rawDescData
+}
+
+var file_proto_location_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
+var file_proto_location_proto_goTypes = []interface{}{
+ (*Point)(nil), // 0: location.Point
+ (*Entity)(nil), // 1: location.Entity
+ (*ReadRequest)(nil), // 2: location.ReadRequest
+ (*ReadResponse)(nil), // 3: location.ReadResponse
+ (*SaveRequest)(nil), // 4: location.SaveRequest
+ (*SaveResponse)(nil), // 5: location.SaveResponse
+ (*SearchRequest)(nil), // 6: location.SearchRequest
+ (*SearchResponse)(nil), // 7: location.SearchResponse
+}
+var file_proto_location_proto_depIdxs = []int32{
+ 0, // 0: location.Entity.location:type_name -> location.Point
+ 1, // 1: location.ReadResponse.entity:type_name -> location.Entity
+ 1, // 2: location.SaveRequest.entity:type_name -> location.Entity
+ 0, // 3: location.SearchRequest.center:type_name -> location.Point
+ 1, // 4: location.SearchResponse.entities:type_name -> location.Entity
+ 2, // 5: location.Location.Read:input_type -> location.ReadRequest
+ 4, // 6: location.Location.Save:input_type -> location.SaveRequest
+ 6, // 7: location.Location.Search:input_type -> location.SearchRequest
+ 3, // 8: location.Location.Read:output_type -> location.ReadResponse
+ 5, // 9: location.Location.Save:output_type -> location.SaveResponse
+ 7, // 10: location.Location.Search:output_type -> location.SearchResponse
+ 8, // [8:11] is the sub-list for method output_type
+ 5, // [5:8] is the sub-list for method input_type
+ 5, // [5:5] is the sub-list for extension type_name
+ 5, // [5:5] is the sub-list for extension extendee
+ 0, // [0:5] is the sub-list for field type_name
+}
+
+func init() { file_proto_location_proto_init() }
+func file_proto_location_proto_init() {
+ if File_proto_location_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_proto_location_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Point); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_location_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Entity); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_location_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ReadRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_location_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ReadResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_location_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SaveRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_location_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SaveResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_location_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SearchRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_location_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SearchResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_proto_location_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 8,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_proto_location_proto_goTypes,
+ DependencyIndexes: file_proto_location_proto_depIdxs,
+ MessageInfos: file_proto_location_proto_msgTypes,
+ }.Build()
+ File_proto_location_proto = out.File
+ file_proto_location_proto_rawDesc = nil
+ file_proto_location_proto_goTypes = nil
+ file_proto_location_proto_depIdxs = nil
}
diff --git a/location/proto/location.pb.micro.go b/location/proto/location.pb.micro.go
index 06efedd..97460c9 100644
--- a/location/proto/location.pb.micro.go
+++ b/location/proto/location.pb.micro.go
@@ -1,6 +1,9 @@
// Code generated by protoc-gen-micro. DO NOT EDIT.
// source: proto/location.proto
+// The location service stores GPS points for tracking purposes
+// and provides endpoints to query those points.
+
package location
import (
@@ -42,7 +45,9 @@ func NewLocationEndpoints() []*api.Endpoint {
// Client API for Location service
type LocationService interface {
+ // Read locations
Read(ctx context.Context, in *ReadRequest, opts ...client.CallOption) (*ReadResponse, error)
+ // Save locations
Save(ctx context.Context, in *SaveRequest, opts ...client.CallOption) (*SaveResponse, error)
Search(ctx context.Context, in *SearchRequest, opts ...client.CallOption) (*SearchResponse, error)
}
@@ -92,7 +97,9 @@ func (c *locationService) Search(ctx context.Context, in *SearchRequest, opts ..
// Server API for Location service
type LocationHandler interface {
+ // Read locations
Read(context.Context, *ReadRequest, *ReadResponse) error
+ // Save locations
Save(context.Context, *SaveRequest, *SaveResponse) error
Search(context.Context, *SearchRequest, *SearchResponse) error
}
diff --git a/location/proto/location.proto b/location/proto/location.proto
index 392aa0b..c67d6b8 100644
--- a/location/proto/location.proto
+++ b/location/proto/location.proto
@@ -1,14 +1,20 @@
syntax = "proto3";
+option go_package = "proto;location";
+
+// The location service stores GPS points for tracking purposes
+// and provides endpoints to query those points.
package location;
service Location {
+ // Read locations
rpc Read(ReadRequest) returns (ReadResponse) {}
+ // Save locations
rpc Save(SaveRequest) returns (SaveResponse) {}
rpc Search(SearchRequest) returns (SearchResponse) {}
}
-
+// A point is a GPS coordinate.
message Point {
double latitude = 1;
double longitude = 2;
@@ -38,7 +44,8 @@ message SaveResponse {
message SearchRequest {
Point center = 1;
- double radius = 2; // in meters
+ // in meters
+ double radius = 2;
string type = 3;
int64 numEntities = 4;
}
diff --git a/messages/README.md b/messages/README.md
index e7af699..dcb9a16 100644
--- a/messages/README.md
+++ b/messages/README.md
@@ -1,11 +1,19 @@
+The messages service is a simplified service for sending messages, much like email.
+
# Messages Service
-The messages service is a simplified service for sending messages, much like email. You can send a message using the CLI:
+## Send a message
+
+### CLI
+
```bash
> micro messages send --to=John --from=Barry --subject=HelloWorld --text="Hello John"
```
-And then list the messages a user has recieved:
+## List the messages a user has received
+
+### CLI
+
```bash
> micro messages list --user=John
{
@@ -22,7 +30,10 @@ And then list the messages a user has recieved:
}
```
-Or lookup an individual email by ID:
+## Lookup an individual email by ID
+
+### CLI
+
```bash
> micro messages read --id=78efd836-ca51-4163-af43-65985f7c6587
{
diff --git a/messages/proto/messages.proto b/messages/proto/messages.proto
index af85161..9fadac7 100644
--- a/messages/proto/messages.proto
+++ b/messages/proto/messages.proto
@@ -1,7 +1,7 @@
syntax = "proto3";
package messages;
-option go_package = "github.com/micro/services/messages/proto;messages";
+option go_package = "proto;messages";
service Messages {
rpc Send(SendRequest) returns (SendResponse);
diff --git a/messages/skip b/messages/skip
new file mode 100644
index 0000000..e69de29
diff --git a/notes/README.md b/notes/README.md
index 3fd8cc3..1fa74ee 100644
--- a/notes/README.md
+++ b/notes/README.md
@@ -1,8 +1,8 @@
+Notes service is an RPC service which offers CRUD for notes. It demonstrates usage of the store, errors and logger pacakges.
+
# Notes Service
-Notes service is an RPC service which offers CRUD for notes. It demonstrates usage of the store, errors and logger pacakges. Example usage:
-
-Create a note
+## Create a note
```bash
micro notes create --title="HelloWorld" --text="MyFirstNote"
@@ -11,14 +11,14 @@ micro notes create --title="HelloWorld" --text="MyFirstNote"
}
```
-Update a note
+## Update a note
```bash
micro notes update --id=6d3fa5c0-6e79-4418-a72a-c1650efb65d2 --title="HelloWorld" --text="MyFirstNote (v2)"
{}
```
-List notes
+## List notes
```bash
micro notes list
@@ -34,7 +34,7 @@ micro notes list
}
```
-Delete a note
+## Delete a note
```bash
micro notes delete --id=6d3fa5c0-6e79-4418-a72a-c1650efb65d2
diff --git a/notes/proto/notes.proto b/notes/proto/notes.proto
index 3ff8281..e2d9267 100644
--- a/notes/proto/notes.proto
+++ b/notes/proto/notes.proto
@@ -1,7 +1,7 @@
syntax = "proto3";
package notes;
-option go_package = "github.com/micro/services/notes/proto;notes";
+option go_package = "proto;notes";
service Notes {
rpc List(ListRequest) returns (ListResponse);
diff --git a/notes/skip b/notes/skip
new file mode 100644
index 0000000..e69de29
diff --git a/places/Makefile b/places/Makefile
index bb937c3..2074419 100644
--- a/places/Makefile
+++ b/places/Makefile
@@ -7,8 +7,13 @@ init:
.PHONY: proto
proto:
- protoc --proto_path=. --micro_out=. --go_out=:. proto/places.proto
-
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/places.proto
+
+.PHONY: docs
+docs:
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/places.proto
+ @redoc-cli bundle api-protobuf.json
+
.PHONY: build
build:
go build -o places *.go
diff --git a/places/README.md b/places/README.md
index b79076a..8b5541f 100644
--- a/places/README.md
+++ b/places/README.md
@@ -1,6 +1,6 @@
-# Places Service
+The places service stores places of interest by geolocation.
-The places service stores places of interest by geolocation
+# Places Service
Generated with
diff --git a/places/proto/places.pb.go b/places/proto/places.pb.go
index 7c50a01..bf9234e 100644
--- a/places/proto/places.pb.go
+++ b/places/proto/places.pb.go
@@ -1,407 +1,662 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.6.1
// source: proto/places.proto
package places
import (
- fmt "fmt"
proto "github.com/golang/protobuf/proto"
timestamp "github.com/golang/protobuf/ptypes/timestamp"
wrappers "github.com/golang/protobuf/ptypes/wrappers"
- math "math"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
)
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
+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)
+)
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
type Location struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
- Metadata map[string]string `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- Timestamp *timestamp.Timestamp `protobuf:"bytes,4,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
- Latitude *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=latitude,proto3" json:"latitude,omitempty"`
- Longitude *wrappers.DoubleValue `protobuf:"bytes,6,opt,name=longitude,proto3" json:"longitude,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+ Metadata map[string]string `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ Timestamp *timestamp.Timestamp `protobuf:"bytes,4,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+ Latitude *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=latitude,proto3" json:"latitude,omitempty"`
+ Longitude *wrappers.DoubleValue `protobuf:"bytes,6,opt,name=longitude,proto3" json:"longitude,omitempty"`
}
-func (m *Location) Reset() { *m = Location{} }
-func (m *Location) String() string { return proto.CompactTextString(m) }
-func (*Location) ProtoMessage() {}
+func (x *Location) Reset() {
+ *x = Location{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_places_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Location) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Location) ProtoMessage() {}
+
+func (x *Location) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_places_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 Location.ProtoReflect.Descriptor instead.
func (*Location) Descriptor() ([]byte, []int) {
- return fileDescriptor_3b635ff9d2e2d652, []int{0}
+ return file_proto_places_proto_rawDescGZIP(), []int{0}
}
-func (m *Location) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_Location.Unmarshal(m, b)
-}
-func (m *Location) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_Location.Marshal(b, m, deterministic)
-}
-func (m *Location) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Location.Merge(m, src)
-}
-func (m *Location) XXX_Size() int {
- return xxx_messageInfo_Location.Size(m)
-}
-func (m *Location) XXX_DiscardUnknown() {
- xxx_messageInfo_Location.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Location proto.InternalMessageInfo
-
-func (m *Location) GetId() string {
- if m != nil {
- return m.Id
+func (x *Location) GetId() string {
+ if x != nil {
+ return x.Id
}
return ""
}
-func (m *Location) GetName() string {
- if m != nil {
- return m.Name
+func (x *Location) GetName() string {
+ if x != nil {
+ return x.Name
}
return ""
}
-func (m *Location) GetMetadata() map[string]string {
- if m != nil {
- return m.Metadata
+func (x *Location) GetMetadata() map[string]string {
+ if x != nil {
+ return x.Metadata
}
return nil
}
-func (m *Location) GetTimestamp() *timestamp.Timestamp {
- if m != nil {
- return m.Timestamp
+func (x *Location) GetTimestamp() *timestamp.Timestamp {
+ if x != nil {
+ return x.Timestamp
}
return nil
}
-func (m *Location) GetLatitude() *wrappers.DoubleValue {
- if m != nil {
- return m.Latitude
+func (x *Location) GetLatitude() *wrappers.DoubleValue {
+ if x != nil {
+ return x.Latitude
}
return nil
}
-func (m *Location) GetLongitude() *wrappers.DoubleValue {
- if m != nil {
- return m.Longitude
+func (x *Location) GetLongitude() *wrappers.DoubleValue {
+ if x != nil {
+ return x.Longitude
}
return nil
}
type SaveRequest struct {
- Places []*Location `protobuf:"bytes,1,rep,name=places,proto3" json:"places,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Places []*Location `protobuf:"bytes,1,rep,name=places,proto3" json:"places,omitempty"`
}
-func (m *SaveRequest) Reset() { *m = SaveRequest{} }
-func (m *SaveRequest) String() string { return proto.CompactTextString(m) }
-func (*SaveRequest) ProtoMessage() {}
+func (x *SaveRequest) Reset() {
+ *x = SaveRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_places_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SaveRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SaveRequest) ProtoMessage() {}
+
+func (x *SaveRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_places_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 SaveRequest.ProtoReflect.Descriptor instead.
func (*SaveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_3b635ff9d2e2d652, []int{1}
+ return file_proto_places_proto_rawDescGZIP(), []int{1}
}
-func (m *SaveRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_SaveRequest.Unmarshal(m, b)
-}
-func (m *SaveRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_SaveRequest.Marshal(b, m, deterministic)
-}
-func (m *SaveRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_SaveRequest.Merge(m, src)
-}
-func (m *SaveRequest) XXX_Size() int {
- return xxx_messageInfo_SaveRequest.Size(m)
-}
-func (m *SaveRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_SaveRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SaveRequest proto.InternalMessageInfo
-
-func (m *SaveRequest) GetPlaces() []*Location {
- if m != nil {
- return m.Places
+func (x *SaveRequest) GetPlaces() []*Location {
+ if x != nil {
+ return x.Places
}
return nil
}
type SaveResponse struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
}
-func (m *SaveResponse) Reset() { *m = SaveResponse{} }
-func (m *SaveResponse) String() string { return proto.CompactTextString(m) }
-func (*SaveResponse) ProtoMessage() {}
+func (x *SaveResponse) Reset() {
+ *x = SaveResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_places_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SaveResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SaveResponse) ProtoMessage() {}
+
+func (x *SaveResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_places_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 SaveResponse.ProtoReflect.Descriptor instead.
func (*SaveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_3b635ff9d2e2d652, []int{2}
+ return file_proto_places_proto_rawDescGZIP(), []int{2}
}
-func (m *SaveResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_SaveResponse.Unmarshal(m, b)
-}
-func (m *SaveResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_SaveResponse.Marshal(b, m, deterministic)
-}
-func (m *SaveResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_SaveResponse.Merge(m, src)
-}
-func (m *SaveResponse) XXX_Size() int {
- return xxx_messageInfo_SaveResponse.Size(m)
-}
-func (m *SaveResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_SaveResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SaveResponse proto.InternalMessageInfo
-
type LastRequest struct {
- Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"`
}
-func (m *LastRequest) Reset() { *m = LastRequest{} }
-func (m *LastRequest) String() string { return proto.CompactTextString(m) }
-func (*LastRequest) ProtoMessage() {}
+func (x *LastRequest) Reset() {
+ *x = LastRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_places_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *LastRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LastRequest) ProtoMessage() {}
+
+func (x *LastRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_places_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 LastRequest.ProtoReflect.Descriptor instead.
func (*LastRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_3b635ff9d2e2d652, []int{3}
+ return file_proto_places_proto_rawDescGZIP(), []int{3}
}
-func (m *LastRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_LastRequest.Unmarshal(m, b)
-}
-func (m *LastRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_LastRequest.Marshal(b, m, deterministic)
-}
-func (m *LastRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LastRequest.Merge(m, src)
-}
-func (m *LastRequest) XXX_Size() int {
- return xxx_messageInfo_LastRequest.Size(m)
-}
-func (m *LastRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_LastRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LastRequest proto.InternalMessageInfo
-
-func (m *LastRequest) GetIds() []string {
- if m != nil {
- return m.Ids
+func (x *LastRequest) GetIds() []string {
+ if x != nil {
+ return x.Ids
}
return nil
}
type ListResponse struct {
- Places []*Location `protobuf:"bytes,1,rep,name=places,proto3" json:"places,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Places []*Location `protobuf:"bytes,1,rep,name=places,proto3" json:"places,omitempty"`
}
-func (m *ListResponse) Reset() { *m = ListResponse{} }
-func (m *ListResponse) String() string { return proto.CompactTextString(m) }
-func (*ListResponse) ProtoMessage() {}
+func (x *ListResponse) Reset() {
+ *x = ListResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_places_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListResponse) ProtoMessage() {}
+
+func (x *ListResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_places_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 ListResponse.ProtoReflect.Descriptor instead.
func (*ListResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_3b635ff9d2e2d652, []int{4}
+ return file_proto_places_proto_rawDescGZIP(), []int{4}
}
-func (m *ListResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ListResponse.Unmarshal(m, b)
-}
-func (m *ListResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ListResponse.Marshal(b, m, deterministic)
-}
-func (m *ListResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ListResponse.Merge(m, src)
-}
-func (m *ListResponse) XXX_Size() int {
- return xxx_messageInfo_ListResponse.Size(m)
-}
-func (m *ListResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_ListResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ListResponse proto.InternalMessageInfo
-
-func (m *ListResponse) GetPlaces() []*Location {
- if m != nil {
- return m.Places
+func (x *ListResponse) GetPlaces() []*Location {
+ if x != nil {
+ return x.Places
}
return nil
}
type NearRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
Latitude *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=latitude,proto3" json:"latitude,omitempty"`
Longitude *wrappers.DoubleValue `protobuf:"bytes,2,opt,name=longitude,proto3" json:"longitude,omitempty"`
// radius to search within, units km
- Radius *wrappers.DoubleValue `protobuf:"bytes,3,opt,name=radius,proto3" json:"radius,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ Radius *wrappers.DoubleValue `protobuf:"bytes,3,opt,name=radius,proto3" json:"radius,omitempty"`
}
-func (m *NearRequest) Reset() { *m = NearRequest{} }
-func (m *NearRequest) String() string { return proto.CompactTextString(m) }
-func (*NearRequest) ProtoMessage() {}
+func (x *NearRequest) Reset() {
+ *x = NearRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_places_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NearRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NearRequest) ProtoMessage() {}
+
+func (x *NearRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_places_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 NearRequest.ProtoReflect.Descriptor instead.
func (*NearRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_3b635ff9d2e2d652, []int{5}
+ return file_proto_places_proto_rawDescGZIP(), []int{5}
}
-func (m *NearRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_NearRequest.Unmarshal(m, b)
-}
-func (m *NearRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_NearRequest.Marshal(b, m, deterministic)
-}
-func (m *NearRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NearRequest.Merge(m, src)
-}
-func (m *NearRequest) XXX_Size() int {
- return xxx_messageInfo_NearRequest.Size(m)
-}
-func (m *NearRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_NearRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NearRequest proto.InternalMessageInfo
-
-func (m *NearRequest) GetLatitude() *wrappers.DoubleValue {
- if m != nil {
- return m.Latitude
+func (x *NearRequest) GetLatitude() *wrappers.DoubleValue {
+ if x != nil {
+ return x.Latitude
}
return nil
}
-func (m *NearRequest) GetLongitude() *wrappers.DoubleValue {
- if m != nil {
- return m.Longitude
+func (x *NearRequest) GetLongitude() *wrappers.DoubleValue {
+ if x != nil {
+ return x.Longitude
}
return nil
}
-func (m *NearRequest) GetRadius() *wrappers.DoubleValue {
- if m != nil {
- return m.Radius
+func (x *NearRequest) GetRadius() *wrappers.DoubleValue {
+ if x != nil {
+ return x.Radius
}
return nil
}
type ReadRequest struct {
- Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"`
- After *timestamp.Timestamp `protobuf:"bytes,2,opt,name=after,proto3" json:"after,omitempty"`
- Before *timestamp.Timestamp `protobuf:"bytes,3,opt,name=before,proto3" json:"before,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"`
+ After *timestamp.Timestamp `protobuf:"bytes,2,opt,name=after,proto3" json:"after,omitempty"`
+ Before *timestamp.Timestamp `protobuf:"bytes,3,opt,name=before,proto3" json:"before,omitempty"`
}
-func (m *ReadRequest) Reset() { *m = ReadRequest{} }
-func (m *ReadRequest) String() string { return proto.CompactTextString(m) }
-func (*ReadRequest) ProtoMessage() {}
+func (x *ReadRequest) Reset() {
+ *x = ReadRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_places_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ReadRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReadRequest) ProtoMessage() {}
+
+func (x *ReadRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_places_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 ReadRequest.ProtoReflect.Descriptor instead.
func (*ReadRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_3b635ff9d2e2d652, []int{6}
+ return file_proto_places_proto_rawDescGZIP(), []int{6}
}
-func (m *ReadRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ReadRequest.Unmarshal(m, b)
-}
-func (m *ReadRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ReadRequest.Marshal(b, m, deterministic)
-}
-func (m *ReadRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ReadRequest.Merge(m, src)
-}
-func (m *ReadRequest) XXX_Size() int {
- return xxx_messageInfo_ReadRequest.Size(m)
-}
-func (m *ReadRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_ReadRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ReadRequest proto.InternalMessageInfo
-
-func (m *ReadRequest) GetIds() []string {
- if m != nil {
- return m.Ids
+func (x *ReadRequest) GetIds() []string {
+ if x != nil {
+ return x.Ids
}
return nil
}
-func (m *ReadRequest) GetAfter() *timestamp.Timestamp {
- if m != nil {
- return m.After
+func (x *ReadRequest) GetAfter() *timestamp.Timestamp {
+ if x != nil {
+ return x.After
}
return nil
}
-func (m *ReadRequest) GetBefore() *timestamp.Timestamp {
- if m != nil {
- return m.Before
+func (x *ReadRequest) GetBefore() *timestamp.Timestamp {
+ if x != nil {
+ return x.Before
}
return nil
}
-func init() {
- proto.RegisterType((*Location)(nil), "places.Location")
- proto.RegisterMapType((map[string]string)(nil), "places.Location.MetadataEntry")
- proto.RegisterType((*SaveRequest)(nil), "places.SaveRequest")
- proto.RegisterType((*SaveResponse)(nil), "places.SaveResponse")
- proto.RegisterType((*LastRequest)(nil), "places.LastRequest")
- proto.RegisterType((*ListResponse)(nil), "places.ListResponse")
- proto.RegisterType((*NearRequest)(nil), "places.NearRequest")
- proto.RegisterType((*ReadRequest)(nil), "places.ReadRequest")
+var File_proto_places_proto protoreflect.FileDescriptor
+
+var file_proto_places_proto_rawDesc = []byte{
+ 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x1a, 0x1f, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69,
+ 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67,
+ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77,
+ 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd7, 0x02,
+ 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
+ 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3a,
+ 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x1e, 0x2e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69,
+ 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+ 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
+ 0x74, 0x61, 0x6d, 0x70, 0x12, 0x38, 0x0a, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65,
+ 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56,
+ 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x3a,
+ 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+ 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65,
+ 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
+ 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
+ 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x37, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73,
+ 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x2e,
+ 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73,
+ 0x22, 0x0e, 0x0a, 0x0c, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x1f, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64,
+ 0x73, 0x22, 0x38, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x28, 0x0a, 0x06, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
+ 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x22, 0xb9, 0x01, 0x0a, 0x0b,
+ 0x4e, 0x65, 0x61, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6c,
+ 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+ 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x6c, 0x61, 0x74,
+ 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75,
+ 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c,
+ 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64,
+ 0x65, 0x12, 0x34, 0x0a, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+ 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x61, 0x64,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01,
+ 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x05, 0x61, 0x66, 0x74,
+ 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
+ 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x06, 0x62,
+ 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
+ 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x32,
+ 0xdc, 0x01, 0x0a, 0x06, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x04, 0x53, 0x61,
+ 0x76, 0x65, 0x12, 0x13, 0x2e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x61, 0x76, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73,
+ 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+ 0x33, 0x0a, 0x04, 0x4c, 0x61, 0x73, 0x74, 0x12, 0x13, 0x2e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73,
+ 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70,
+ 0x6c, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x04, 0x4e, 0x65, 0x61, 0x72, 0x12, 0x13, 0x2e, 0x70,
+ 0x6c, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x61, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x04, 0x52, 0x65, 0x61,
+ 0x64, 0x12, 0x13, 0x2e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x2e,
+ 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x62, 0x06,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
-func init() { proto.RegisterFile("proto/places.proto", fileDescriptor_3b635ff9d2e2d652) }
+var (
+ file_proto_places_proto_rawDescOnce sync.Once
+ file_proto_places_proto_rawDescData = file_proto_places_proto_rawDesc
+)
-var fileDescriptor_3b635ff9d2e2d652 = []byte{
- // 460 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0xcd, 0x6e, 0xd3, 0x40,
- 0x14, 0x85, 0x19, 0x3b, 0xb1, 0x92, 0xeb, 0x52, 0x45, 0x97, 0x2e, 0x2c, 0x0b, 0xb5, 0x91, 0x57,
- 0x59, 0x39, 0x28, 0x45, 0x22, 0x0a, 0x5b, 0xd8, 0x05, 0x84, 0x0c, 0x62, 0x3f, 0xa9, 0x6f, 0x22,
- 0x0b, 0xc7, 0x63, 0xec, 0x71, 0x51, 0x1f, 0x80, 0x87, 0xe2, 0x49, 0xd8, 0xf0, 0x30, 0x68, 0x7e,
- 0x1c, 0xbb, 0x45, 0x8d, 0x1a, 0x76, 0x33, 0xe3, 0xf3, 0x5d, 0x9f, 0x39, 0x67, 0x00, 0xcb, 0x4a,
- 0x48, 0x31, 0x2f, 0x73, 0x7e, 0x43, 0x75, 0xac, 0x37, 0xe8, 0x99, 0x5d, 0x78, 0xb5, 0x13, 0x62,
- 0x97, 0xd3, 0x5c, 0x9f, 0x6e, 0x9a, 0xed, 0x5c, 0x66, 0x7b, 0xaa, 0x25, 0xdf, 0x97, 0x46, 0x18,
- 0x5e, 0x3e, 0x14, 0xfc, 0xa8, 0x78, 0x59, 0x52, 0x65, 0x07, 0x45, 0xbf, 0x1d, 0x18, 0xad, 0xc5,
- 0x0d, 0x97, 0x99, 0x28, 0xf0, 0x1c, 0x9c, 0x2c, 0x0d, 0xd8, 0x94, 0xcd, 0xc6, 0x89, 0x93, 0xa5,
- 0x88, 0x30, 0x28, 0xf8, 0x9e, 0x02, 0x47, 0x9f, 0xe8, 0x35, 0xae, 0x60, 0xb4, 0x27, 0xc9, 0x53,
- 0x2e, 0x79, 0xe0, 0x4e, 0xdd, 0x99, 0xbf, 0xb8, 0x8c, 0xad, 0xb5, 0x76, 0x4e, 0xfc, 0xc1, 0x0a,
- 0xde, 0x17, 0xb2, 0xba, 0x4b, 0x0e, 0x7a, 0x5c, 0xc2, 0xf8, 0xe0, 0x2f, 0x18, 0x4c, 0xd9, 0xcc,
- 0x5f, 0x84, 0xb1, 0x31, 0x18, 0xb7, 0x06, 0xe3, 0x2f, 0xad, 0x22, 0xe9, 0xc4, 0xb8, 0x84, 0x51,
- 0xce, 0x65, 0x26, 0x9b, 0x94, 0x82, 0xa1, 0x06, 0x5f, 0xfe, 0x03, 0xbe, 0x13, 0xcd, 0x26, 0xa7,
- 0xaf, 0x3c, 0x6f, 0x28, 0x39, 0xa8, 0x71, 0x05, 0xe3, 0x5c, 0x14, 0x3b, 0x83, 0x7a, 0x4f, 0x40,
- 0x3b, 0x79, 0xf8, 0x16, 0x9e, 0xdf, 0xbb, 0x0a, 0x4e, 0xc0, 0xfd, 0x46, 0x77, 0x36, 0x21, 0xb5,
- 0xc4, 0x0b, 0x18, 0xde, 0x2a, 0xcc, 0x66, 0x64, 0x36, 0x2b, 0x67, 0xc9, 0xa2, 0x37, 0xe0, 0x7f,
- 0xe6, 0xb7, 0x94, 0xd0, 0xf7, 0x86, 0x6a, 0x89, 0x33, 0xb0, 0x9d, 0x05, 0x4c, 0xa7, 0x36, 0x79,
- 0x98, 0x5a, 0x62, 0xbf, 0x47, 0xe7, 0x70, 0x66, 0xc0, 0xba, 0x14, 0x45, 0x4d, 0xd1, 0x15, 0xf8,
- 0x6b, 0x5e, 0xcb, 0x76, 0xd0, 0x04, 0xdc, 0x2c, 0x35, 0x53, 0xc6, 0x89, 0x5a, 0x46, 0x4b, 0x38,
- 0x5b, 0x67, 0x4a, 0x60, 0x80, 0x13, 0x7e, 0xf5, 0x8b, 0x81, 0xff, 0x91, 0x78, 0xd5, 0xce, 0xee,
- 0xc7, 0xcc, 0xfe, 0x3f, 0x66, 0xe7, 0xa4, 0x98, 0xf1, 0x35, 0x78, 0x15, 0x4f, 0xb3, 0xa6, 0x0e,
- 0xdc, 0x27, 0x80, 0x56, 0x1b, 0xfd, 0x64, 0xe0, 0x27, 0xc4, 0xd3, 0x47, 0x73, 0xc1, 0x57, 0x30,
- 0xe4, 0x5b, 0x49, 0x95, 0xf5, 0x73, 0xec, 0xa9, 0x19, 0x21, 0x2e, 0xc0, 0xdb, 0xd0, 0x56, 0x54,
- 0x64, 0x9d, 0x1c, 0x43, 0xac, 0x72, 0xf1, 0x87, 0x81, 0xf7, 0x49, 0xc7, 0x89, 0xd7, 0x30, 0x50,
- 0xcd, 0xe1, 0x8b, 0x36, 0xf0, 0xde, 0x03, 0x08, 0x2f, 0xee, 0x1f, 0xda, 0x72, 0x9f, 0x29, 0x48,
- 0xd5, 0xdb, 0x41, 0xbd, 0xb2, 0x3b, 0xa8, 0x5f, 0xb0, 0x81, 0x54, 0x6f, 0x1d, 0xd4, 0x6b, 0xf1,
- 0x18, 0xa4, 0x02, 0xeb, 0xa0, 0x5e, 0x7c, 0x8f, 0x41, 0x1b, 0x4f, 0x5f, 0xfd, 0xfa, 0x6f, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x7a, 0x9f, 0xaf, 0x48, 0x86, 0x04, 0x00, 0x00,
+func file_proto_places_proto_rawDescGZIP() []byte {
+ file_proto_places_proto_rawDescOnce.Do(func() {
+ file_proto_places_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_places_proto_rawDescData)
+ })
+ return file_proto_places_proto_rawDescData
+}
+
+var file_proto_places_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
+var file_proto_places_proto_goTypes = []interface{}{
+ (*Location)(nil), // 0: places.Location
+ (*SaveRequest)(nil), // 1: places.SaveRequest
+ (*SaveResponse)(nil), // 2: places.SaveResponse
+ (*LastRequest)(nil), // 3: places.LastRequest
+ (*ListResponse)(nil), // 4: places.ListResponse
+ (*NearRequest)(nil), // 5: places.NearRequest
+ (*ReadRequest)(nil), // 6: places.ReadRequest
+ nil, // 7: places.Location.MetadataEntry
+ (*timestamp.Timestamp)(nil), // 8: google.protobuf.Timestamp
+ (*wrappers.DoubleValue)(nil), // 9: google.protobuf.DoubleValue
+}
+var file_proto_places_proto_depIdxs = []int32{
+ 7, // 0: places.Location.metadata:type_name -> places.Location.MetadataEntry
+ 8, // 1: places.Location.timestamp:type_name -> google.protobuf.Timestamp
+ 9, // 2: places.Location.latitude:type_name -> google.protobuf.DoubleValue
+ 9, // 3: places.Location.longitude:type_name -> google.protobuf.DoubleValue
+ 0, // 4: places.SaveRequest.places:type_name -> places.Location
+ 0, // 5: places.ListResponse.places:type_name -> places.Location
+ 9, // 6: places.NearRequest.latitude:type_name -> google.protobuf.DoubleValue
+ 9, // 7: places.NearRequest.longitude:type_name -> google.protobuf.DoubleValue
+ 9, // 8: places.NearRequest.radius:type_name -> google.protobuf.DoubleValue
+ 8, // 9: places.ReadRequest.after:type_name -> google.protobuf.Timestamp
+ 8, // 10: places.ReadRequest.before:type_name -> google.protobuf.Timestamp
+ 1, // 11: places.Places.Save:input_type -> places.SaveRequest
+ 3, // 12: places.Places.Last:input_type -> places.LastRequest
+ 5, // 13: places.Places.Near:input_type -> places.NearRequest
+ 6, // 14: places.Places.Read:input_type -> places.ReadRequest
+ 2, // 15: places.Places.Save:output_type -> places.SaveResponse
+ 4, // 16: places.Places.Last:output_type -> places.ListResponse
+ 4, // 17: places.Places.Near:output_type -> places.ListResponse
+ 4, // 18: places.Places.Read:output_type -> places.ListResponse
+ 15, // [15:19] is the sub-list for method output_type
+ 11, // [11:15] is the sub-list for method input_type
+ 11, // [11:11] is the sub-list for extension type_name
+ 11, // [11:11] is the sub-list for extension extendee
+ 0, // [0:11] is the sub-list for field type_name
+}
+
+func init() { file_proto_places_proto_init() }
+func file_proto_places_proto_init() {
+ if File_proto_places_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_proto_places_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Location); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_places_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SaveRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_places_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SaveResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_places_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*LastRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_places_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_places_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NearRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_places_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ReadRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_proto_places_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 8,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_proto_places_proto_goTypes,
+ DependencyIndexes: file_proto_places_proto_depIdxs,
+ MessageInfos: file_proto_places_proto_msgTypes,
+ }.Build()
+ File_proto_places_proto = out.File
+ file_proto_places_proto_rawDesc = nil
+ file_proto_places_proto_goTypes = nil
+ file_proto_places_proto_depIdxs = nil
}
diff --git a/blog/posts/.gitignore b/posts/.gitignore
similarity index 100%
rename from blog/posts/.gitignore
rename to posts/.gitignore
diff --git a/blog/posts/Dockerfile b/posts/Dockerfile
similarity index 100%
rename from blog/posts/Dockerfile
rename to posts/Dockerfile
diff --git a/blog/posts/Makefile b/posts/Makefile
similarity index 55%
rename from blog/posts/Makefile
rename to posts/Makefile
index 9c0ef57..9f4c678 100644
--- a/blog/posts/Makefile
+++ b/posts/Makefile
@@ -5,8 +5,13 @@ MODIFY=Mgithub.com/micro/micro/proto/api/api.proto=github.com/micro/micro/v3/pro
.PHONY: proto
proto:
- protoc --proto_path=. --micro_out=${MODIFY}:. --go_out=${MODIFY}:. proto/posts.proto
+ protoc --openapi_out=. --proto_path=. --micro_out=${MODIFY}:. --go_out=${MODIFY}:. proto/posts.proto
+
+.PHONY: docs
+docs:
+ protoc --openapi_out=. --proto_path=. --micro_out=${MODIFY}:. --go_out=${MODIFY}:. proto/posts.proto
+ @redoc-cli bundle api-posts.json
.PHONY: build
build: proto
diff --git a/posts/README.md b/posts/README.md
new file mode 100644
index 0000000..7aabf57
--- /dev/null
+++ b/posts/README.md
@@ -0,0 +1,90 @@
+The post service is responsible for storing and querying posts by their slugs or IDs. Posts support tags and metadata, for details see `posts.proto`.
+
+# Post Service
+
+## Create a post
+
+### cURL
+
+```shell
+> curl 'https://api.m3o.com/posts/Save' \
+ -H 'micro-namespace: $yourNamespace' \
+ -H 'authorization: Bearer $yourToken' \
+ -d '{"post":{"id":"1","title":"How to Micro","content":"Simply put, Micro is awesome."}}';
+
+> curl 'https://api.m3o.com/chat/Save' \
+ -H 'micro-namespace: $yourNamespace' \
+ -H 'authorization: Bearer $yourToken' \
+ -d '{"post":{"id":"2","title":"Fresh posts are fresh","content":"This post is fresher than the How to Micro one"}}';
+```
+
+### CLI
+
+```shell
+micro call posts Posts.Save '{"post":{"id":"1","title":"How to Micro","content":"Simply put, Micro is awesome."}}'
+
+micro call posts Posts.Save '{"post":{"id":"2","title":"Fresh posts are fresh","content":"This post is fresher than the How to Micro one"}}'
+```
+
+## Create a post with tags
+
+
+### cURL
+
+```shell
+> curl 'https://api.m3o.com/posts/Save' \
+ -H 'micro-namespace: $yourNamespace' \
+ -H 'authorization: Bearer $yourToken' \
+ -d '{"post":{"id":"3","title":"How to do epic things with Micro","content":"Everything is awesome.","tagNames":["a","b"]}}';
+```
+
+### CLI
+
+```shell
+micro call posts Posts.Save '{"post":{"id":"3","title":"How to do epic things with Micro","content":"Everything is awesome.","tagNames":["a","b"]}}'
+```
+
+## Query posts
+
+### cURL
+
+```shell
+# Query all
+> curl 'https://api.m3o.com/posts/Query' \
+ -H 'micro-namespace: $yourNamespace' \
+ -H 'authorization: Bearer $yourToken' \
+ -d '{}';
+
+# Query by slug
+> curl 'https://api.m3o.com/posts/Query' \
+ -H 'micro-namespace: $yourNamespace' \
+ -H 'authorization: Bearer $yourToken' \
+ -d '{"slug":"how-to-micro"}';
+
+# Limit and offset
+> curl 'https://api.m3o.com/posts/Query' \
+ -H 'micro-namespace: $yourNamespace' \
+ -H 'authorization: Bearer $yourToken' \
+ -d '{"offset": 10, "limit": 10}';
+```
+
+### CLI
+
+```shell
+micro call posts Posts.Query '{}'
+micro call posts Posts.Query '{"slug":"how-to-micro"}'
+micro call posts Posts.Query '{"offset": 10, "limit": 10}'
+```
+
+## Delete posts
+
+```shell
+> curl 'https://api.m3o.com/posts/Delete' \
+ -H 'micro-namespace: $yourNamespace' \
+ -H 'authorization: Bearer $yourToken' \
+ -d '{"id": "3c9ea66c"}';
+```
+
+```shell
+micro call posts Posts.Delete '{"id": "3c9ea66c"}'
+```
diff --git a/blog/posts/generate.go b/posts/generate.go
similarity index 100%
rename from blog/posts/generate.go
rename to posts/generate.go
diff --git a/posts/github.com/micro/services/posts/proto/posts.pb.go b/posts/github.com/micro/services/posts/proto/posts.pb.go
new file mode 100644
index 0000000..b0cb15c
--- /dev/null
+++ b/posts/github.com/micro/services/posts/proto/posts.pb.go
@@ -0,0 +1,738 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.6.1
+// source: proto/posts.proto
+
+package posts
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ 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)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type Post struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
+ Slug string `protobuf:"bytes,3,opt,name=slug,proto3" json:"slug,omitempty"`
+ Content string `protobuf:"bytes,4,opt,name=content,proto3" json:"content,omitempty"`
+ Created int64 `protobuf:"varint,5,opt,name=created,proto3" json:"created,omitempty"`
+ Updated int64 `protobuf:"varint,6,opt,name=updated,proto3" json:"updated,omitempty"`
+ Author string `protobuf:"bytes,7,opt,name=author,proto3" json:"author,omitempty"`
+ Tags []string `protobuf:"bytes,8,rep,name=tags,proto3" json:"tags,omitempty"`
+ Metadata map[string]string `protobuf:"bytes,9,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ Image string `protobuf:"bytes,19,opt,name=image,proto3" json:"image,omitempty"`
+}
+
+func (x *Post) Reset() {
+ *x = Post{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_posts_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Post) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Post) ProtoMessage() {}
+
+func (x *Post) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_posts_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 Post.ProtoReflect.Descriptor instead.
+func (*Post) Descriptor() ([]byte, []int) {
+ return file_proto_posts_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Post) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *Post) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *Post) GetSlug() string {
+ if x != nil {
+ return x.Slug
+ }
+ return ""
+}
+
+func (x *Post) GetContent() string {
+ if x != nil {
+ return x.Content
+ }
+ return ""
+}
+
+func (x *Post) GetCreated() int64 {
+ if x != nil {
+ return x.Created
+ }
+ return 0
+}
+
+func (x *Post) GetUpdated() int64 {
+ if x != nil {
+ return x.Updated
+ }
+ return 0
+}
+
+func (x *Post) GetAuthor() string {
+ if x != nil {
+ return x.Author
+ }
+ return ""
+}
+
+func (x *Post) GetTags() []string {
+ if x != nil {
+ return x.Tags
+ }
+ return nil
+}
+
+func (x *Post) GetMetadata() map[string]string {
+ if x != nil {
+ return x.Metadata
+ }
+ return nil
+}
+
+func (x *Post) GetImage() string {
+ if x != nil {
+ return x.Image
+ }
+ return ""
+}
+
+// Query posts. Acts as a listing when no id or slug provided.
+// Gets a single post by id or slug if any of them provided.
+type QueryRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Slug string `protobuf:"bytes,2,opt,name=slug,proto3" json:"slug,omitempty"`
+ Tag string `protobuf:"bytes,3,opt,name=tag,proto3" json:"tag,omitempty"`
+ Offset int64 `protobuf:"varint,4,opt,name=offset,proto3" json:"offset,omitempty"`
+ Limit int64 `protobuf:"varint,5,opt,name=limit,proto3" json:"limit,omitempty"`
+}
+
+func (x *QueryRequest) Reset() {
+ *x = QueryRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_posts_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *QueryRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*QueryRequest) ProtoMessage() {}
+
+func (x *QueryRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_posts_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 QueryRequest.ProtoReflect.Descriptor instead.
+func (*QueryRequest) Descriptor() ([]byte, []int) {
+ return file_proto_posts_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *QueryRequest) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *QueryRequest) GetSlug() string {
+ if x != nil {
+ return x.Slug
+ }
+ return ""
+}
+
+func (x *QueryRequest) GetTag() string {
+ if x != nil {
+ return x.Tag
+ }
+ return ""
+}
+
+func (x *QueryRequest) GetOffset() int64 {
+ if x != nil {
+ return x.Offset
+ }
+ return 0
+}
+
+func (x *QueryRequest) GetLimit() int64 {
+ if x != nil {
+ return x.Limit
+ }
+ return 0
+}
+
+type QueryResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Posts []*Post `protobuf:"bytes,1,rep,name=posts,proto3" json:"posts,omitempty"`
+}
+
+func (x *QueryResponse) Reset() {
+ *x = QueryResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_posts_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *QueryResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*QueryResponse) ProtoMessage() {}
+
+func (x *QueryResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_posts_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 QueryResponse.ProtoReflect.Descriptor instead.
+func (*QueryResponse) Descriptor() ([]byte, []int) {
+ return file_proto_posts_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *QueryResponse) GetPosts() []*Post {
+ if x != nil {
+ return x.Posts
+ }
+ return nil
+}
+
+type SaveRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
+ Slug string `protobuf:"bytes,3,opt,name=slug,proto3" json:"slug,omitempty"`
+ Content string `protobuf:"bytes,4,opt,name=content,proto3" json:"content,omitempty"`
+ Timestamp int64 `protobuf:"varint,5,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+ // When updating a post and wanting to delete all tags,
+ // send a list of tags with only one member being an empty string [""]
+ Tags []string `protobuf:"bytes,6,rep,name=tags,proto3" json:"tags,omitempty"`
+ Metadata map[string]string `protobuf:"bytes,7,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ Image string `protobuf:"bytes,8,opt,name=image,proto3" json:"image,omitempty"`
+}
+
+func (x *SaveRequest) Reset() {
+ *x = SaveRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_posts_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SaveRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SaveRequest) ProtoMessage() {}
+
+func (x *SaveRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_posts_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 SaveRequest.ProtoReflect.Descriptor instead.
+func (*SaveRequest) Descriptor() ([]byte, []int) {
+ return file_proto_posts_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *SaveRequest) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *SaveRequest) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *SaveRequest) GetSlug() string {
+ if x != nil {
+ return x.Slug
+ }
+ return ""
+}
+
+func (x *SaveRequest) GetContent() string {
+ if x != nil {
+ return x.Content
+ }
+ return ""
+}
+
+func (x *SaveRequest) GetTimestamp() int64 {
+ if x != nil {
+ return x.Timestamp
+ }
+ return 0
+}
+
+func (x *SaveRequest) GetTags() []string {
+ if x != nil {
+ return x.Tags
+ }
+ return nil
+}
+
+func (x *SaveRequest) GetMetadata() map[string]string {
+ if x != nil {
+ return x.Metadata
+ }
+ return nil
+}
+
+func (x *SaveRequest) GetImage() string {
+ if x != nil {
+ return x.Image
+ }
+ return ""
+}
+
+type SaveResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (x *SaveResponse) Reset() {
+ *x = SaveResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_posts_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SaveResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SaveResponse) ProtoMessage() {}
+
+func (x *SaveResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_posts_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 SaveResponse.ProtoReflect.Descriptor instead.
+func (*SaveResponse) Descriptor() ([]byte, []int) {
+ return file_proto_posts_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *SaveResponse) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+type DeleteRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (x *DeleteRequest) Reset() {
+ *x = DeleteRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_posts_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DeleteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteRequest) ProtoMessage() {}
+
+func (x *DeleteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_posts_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 DeleteRequest.ProtoReflect.Descriptor instead.
+func (*DeleteRequest) Descriptor() ([]byte, []int) {
+ return file_proto_posts_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *DeleteRequest) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+type DeleteResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *DeleteResponse) Reset() {
+ *x = DeleteResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_posts_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DeleteResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteResponse) ProtoMessage() {}
+
+func (x *DeleteResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_posts_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 DeleteResponse.ProtoReflect.Descriptor instead.
+func (*DeleteResponse) Descriptor() ([]byte, []int) {
+ return file_proto_posts_proto_rawDescGZIP(), []int{6}
+}
+
+var File_proto_posts_proto protoreflect.FileDescriptor
+
+var file_proto_posts_proto_rawDesc = []byte{
+ 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x22, 0xc4, 0x02, 0x0a, 0x04, 0x50,
+ 0x6f, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x75,
+ 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6c, 0x75, 0x67, 0x12, 0x18, 0x0a,
+ 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x64, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01,
+ 0x28, 0x03, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61,
+ 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x75, 0x74,
+ 0x68, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28,
+ 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
+ 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x73, 0x74,
+ 0x73, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14,
+ 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69,
+ 0x6d, 0x61, 0x67, 0x65, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+ 0x01, 0x22, 0x72, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
+ 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x75, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x04, 0x73, 0x6c, 0x75, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65,
+ 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12,
+ 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05,
+ 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x32, 0x0a, 0x0d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x05, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x50, 0x6f,
+ 0x73, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x22, 0xa4, 0x02, 0x0a, 0x0b, 0x53, 0x61,
+ 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12,
+ 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x75, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73,
+ 0x6c, 0x75, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a,
+ 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x74,
+ 0x61, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12,
+ 0x3c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28,
+ 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e,
+ 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a,
+ 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d,
+ 0x61, 0x67, 0x65, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
+ 0x22, 0x1e, 0x0a, 0x0c, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
+ 0x22, 0x1f, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
+ 0x64, 0x22, 0x10, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x32, 0xa9, 0x01, 0x0a, 0x05, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x34, 0x0a,
+ 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x13, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x51,
+ 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x6f,
+ 0x73, 0x74, 0x73, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x04, 0x53, 0x61, 0x76, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x6f,
+ 0x73, 0x74, 0x73, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x13, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x12, 0x14, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x44,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42,
+ 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x69,
+ 0x63, 0x72, 0x6f, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x70, 0x6f, 0x73,
+ 0x74, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x62, 0x06,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_proto_posts_proto_rawDescOnce sync.Once
+ file_proto_posts_proto_rawDescData = file_proto_posts_proto_rawDesc
+)
+
+func file_proto_posts_proto_rawDescGZIP() []byte {
+ file_proto_posts_proto_rawDescOnce.Do(func() {
+ file_proto_posts_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_posts_proto_rawDescData)
+ })
+ return file_proto_posts_proto_rawDescData
+}
+
+var file_proto_posts_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
+var file_proto_posts_proto_goTypes = []interface{}{
+ (*Post)(nil), // 0: posts.Post
+ (*QueryRequest)(nil), // 1: posts.QueryRequest
+ (*QueryResponse)(nil), // 2: posts.QueryResponse
+ (*SaveRequest)(nil), // 3: posts.SaveRequest
+ (*SaveResponse)(nil), // 4: posts.SaveResponse
+ (*DeleteRequest)(nil), // 5: posts.DeleteRequest
+ (*DeleteResponse)(nil), // 6: posts.DeleteResponse
+ nil, // 7: posts.Post.MetadataEntry
+ nil, // 8: posts.SaveRequest.MetadataEntry
+}
+var file_proto_posts_proto_depIdxs = []int32{
+ 7, // 0: posts.Post.metadata:type_name -> posts.Post.MetadataEntry
+ 0, // 1: posts.QueryResponse.posts:type_name -> posts.Post
+ 8, // 2: posts.SaveRequest.metadata:type_name -> posts.SaveRequest.MetadataEntry
+ 1, // 3: posts.Posts.Query:input_type -> posts.QueryRequest
+ 3, // 4: posts.Posts.Save:input_type -> posts.SaveRequest
+ 5, // 5: posts.Posts.Delete:input_type -> posts.DeleteRequest
+ 2, // 6: posts.Posts.Query:output_type -> posts.QueryResponse
+ 4, // 7: posts.Posts.Save:output_type -> posts.SaveResponse
+ 6, // 8: posts.Posts.Delete:output_type -> posts.DeleteResponse
+ 6, // [6:9] is the sub-list for method output_type
+ 3, // [3:6] is the sub-list for method input_type
+ 3, // [3:3] is the sub-list for extension type_name
+ 3, // [3:3] is the sub-list for extension extendee
+ 0, // [0:3] is the sub-list for field type_name
+}
+
+func init() { file_proto_posts_proto_init() }
+func file_proto_posts_proto_init() {
+ if File_proto_posts_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_proto_posts_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Post); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_posts_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*QueryRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_posts_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*QueryResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_posts_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SaveRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_posts_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SaveResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_posts_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DeleteRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_posts_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DeleteResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_proto_posts_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 9,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_proto_posts_proto_goTypes,
+ DependencyIndexes: file_proto_posts_proto_depIdxs,
+ MessageInfos: file_proto_posts_proto_msgTypes,
+ }.Build()
+ File_proto_posts_proto = out.File
+ file_proto_posts_proto_rawDesc = nil
+ file_proto_posts_proto_goTypes = nil
+ file_proto_posts_proto_depIdxs = nil
+}
diff --git a/blog/posts/proto/posts.pb.micro.go b/posts/github.com/micro/services/posts/proto/posts.pb.micro.go
similarity index 100%
rename from blog/posts/proto/posts.pb.micro.go
rename to posts/github.com/micro/services/posts/proto/posts.pb.micro.go
diff --git a/blog/posts/handler/posts.go b/posts/handler/posts.go
similarity index 98%
rename from blog/posts/handler/posts.go
rename to posts/handler/posts.go
index a1e4386..8ea83ce 100644
--- a/blog/posts/handler/posts.go
+++ b/posts/handler/posts.go
@@ -11,8 +11,8 @@ import (
"github.com/micro/dev/model"
"github.com/gosimple/slug"
- proto "github.com/micro/services/blog/posts/proto"
- tags "github.com/micro/services/blog/tags/proto"
+ proto "github.com/micro/services/posts/proto"
+ tags "github.com/micro/services/tags/proto"
)
const (
diff --git a/blog/posts/main.go b/posts/main.go
similarity index 79%
rename from blog/posts/main.go
rename to posts/main.go
index 636e9d5..39b3c8f 100644
--- a/blog/posts/main.go
+++ b/posts/main.go
@@ -3,8 +3,8 @@ package main
import (
"github.com/micro/micro/v3/service"
"github.com/micro/micro/v3/service/logger"
- "github.com/micro/services/blog/posts/handler"
- tags "github.com/micro/services/blog/tags/proto"
+ "github.com/micro/services/posts/handler"
+ tags "github.com/micro/services/tags/proto"
)
func main() {
diff --git a/blog/posts/micro.mu b/posts/micro.mu
similarity index 100%
rename from blog/posts/micro.mu
rename to posts/micro.mu
diff --git a/posts/proto/posts.pb.go b/posts/proto/posts.pb.go
new file mode 100644
index 0000000..779cbf5
--- /dev/null
+++ b/posts/proto/posts.pb.go
@@ -0,0 +1,736 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.6.1
+// source: proto/posts.proto
+
+package posts
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ 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)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type Post struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
+ Slug string `protobuf:"bytes,3,opt,name=slug,proto3" json:"slug,omitempty"`
+ Content string `protobuf:"bytes,4,opt,name=content,proto3" json:"content,omitempty"`
+ Created int64 `protobuf:"varint,5,opt,name=created,proto3" json:"created,omitempty"`
+ Updated int64 `protobuf:"varint,6,opt,name=updated,proto3" json:"updated,omitempty"`
+ Author string `protobuf:"bytes,7,opt,name=author,proto3" json:"author,omitempty"`
+ Tags []string `protobuf:"bytes,8,rep,name=tags,proto3" json:"tags,omitempty"`
+ Metadata map[string]string `protobuf:"bytes,9,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ Image string `protobuf:"bytes,19,opt,name=image,proto3" json:"image,omitempty"`
+}
+
+func (x *Post) Reset() {
+ *x = Post{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_posts_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Post) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Post) ProtoMessage() {}
+
+func (x *Post) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_posts_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 Post.ProtoReflect.Descriptor instead.
+func (*Post) Descriptor() ([]byte, []int) {
+ return file_proto_posts_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Post) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *Post) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *Post) GetSlug() string {
+ if x != nil {
+ return x.Slug
+ }
+ return ""
+}
+
+func (x *Post) GetContent() string {
+ if x != nil {
+ return x.Content
+ }
+ return ""
+}
+
+func (x *Post) GetCreated() int64 {
+ if x != nil {
+ return x.Created
+ }
+ return 0
+}
+
+func (x *Post) GetUpdated() int64 {
+ if x != nil {
+ return x.Updated
+ }
+ return 0
+}
+
+func (x *Post) GetAuthor() string {
+ if x != nil {
+ return x.Author
+ }
+ return ""
+}
+
+func (x *Post) GetTags() []string {
+ if x != nil {
+ return x.Tags
+ }
+ return nil
+}
+
+func (x *Post) GetMetadata() map[string]string {
+ if x != nil {
+ return x.Metadata
+ }
+ return nil
+}
+
+func (x *Post) GetImage() string {
+ if x != nil {
+ return x.Image
+ }
+ return ""
+}
+
+// Query posts. Acts as a listing when no id or slug provided.
+// Gets a single post by id or slug if any of them provided.
+type QueryRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Slug string `protobuf:"bytes,2,opt,name=slug,proto3" json:"slug,omitempty"`
+ Tag string `protobuf:"bytes,3,opt,name=tag,proto3" json:"tag,omitempty"`
+ Offset int64 `protobuf:"varint,4,opt,name=offset,proto3" json:"offset,omitempty"`
+ Limit int64 `protobuf:"varint,5,opt,name=limit,proto3" json:"limit,omitempty"`
+}
+
+func (x *QueryRequest) Reset() {
+ *x = QueryRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_posts_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *QueryRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*QueryRequest) ProtoMessage() {}
+
+func (x *QueryRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_posts_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 QueryRequest.ProtoReflect.Descriptor instead.
+func (*QueryRequest) Descriptor() ([]byte, []int) {
+ return file_proto_posts_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *QueryRequest) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *QueryRequest) GetSlug() string {
+ if x != nil {
+ return x.Slug
+ }
+ return ""
+}
+
+func (x *QueryRequest) GetTag() string {
+ if x != nil {
+ return x.Tag
+ }
+ return ""
+}
+
+func (x *QueryRequest) GetOffset() int64 {
+ if x != nil {
+ return x.Offset
+ }
+ return 0
+}
+
+func (x *QueryRequest) GetLimit() int64 {
+ if x != nil {
+ return x.Limit
+ }
+ return 0
+}
+
+type QueryResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Posts []*Post `protobuf:"bytes,1,rep,name=posts,proto3" json:"posts,omitempty"`
+}
+
+func (x *QueryResponse) Reset() {
+ *x = QueryResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_posts_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *QueryResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*QueryResponse) ProtoMessage() {}
+
+func (x *QueryResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_posts_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 QueryResponse.ProtoReflect.Descriptor instead.
+func (*QueryResponse) Descriptor() ([]byte, []int) {
+ return file_proto_posts_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *QueryResponse) GetPosts() []*Post {
+ if x != nil {
+ return x.Posts
+ }
+ return nil
+}
+
+type SaveRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
+ Slug string `protobuf:"bytes,3,opt,name=slug,proto3" json:"slug,omitempty"`
+ Content string `protobuf:"bytes,4,opt,name=content,proto3" json:"content,omitempty"`
+ Timestamp int64 `protobuf:"varint,5,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+ // When updating a post and wanting to delete all tags,
+ // send a list of tags with only one member being an empty string [""]
+ Tags []string `protobuf:"bytes,6,rep,name=tags,proto3" json:"tags,omitempty"`
+ Metadata map[string]string `protobuf:"bytes,7,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ Image string `protobuf:"bytes,8,opt,name=image,proto3" json:"image,omitempty"`
+}
+
+func (x *SaveRequest) Reset() {
+ *x = SaveRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_posts_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SaveRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SaveRequest) ProtoMessage() {}
+
+func (x *SaveRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_posts_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 SaveRequest.ProtoReflect.Descriptor instead.
+func (*SaveRequest) Descriptor() ([]byte, []int) {
+ return file_proto_posts_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *SaveRequest) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *SaveRequest) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *SaveRequest) GetSlug() string {
+ if x != nil {
+ return x.Slug
+ }
+ return ""
+}
+
+func (x *SaveRequest) GetContent() string {
+ if x != nil {
+ return x.Content
+ }
+ return ""
+}
+
+func (x *SaveRequest) GetTimestamp() int64 {
+ if x != nil {
+ return x.Timestamp
+ }
+ return 0
+}
+
+func (x *SaveRequest) GetTags() []string {
+ if x != nil {
+ return x.Tags
+ }
+ return nil
+}
+
+func (x *SaveRequest) GetMetadata() map[string]string {
+ if x != nil {
+ return x.Metadata
+ }
+ return nil
+}
+
+func (x *SaveRequest) GetImage() string {
+ if x != nil {
+ return x.Image
+ }
+ return ""
+}
+
+type SaveResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (x *SaveResponse) Reset() {
+ *x = SaveResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_posts_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SaveResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SaveResponse) ProtoMessage() {}
+
+func (x *SaveResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_posts_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 SaveResponse.ProtoReflect.Descriptor instead.
+func (*SaveResponse) Descriptor() ([]byte, []int) {
+ return file_proto_posts_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *SaveResponse) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+type DeleteRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (x *DeleteRequest) Reset() {
+ *x = DeleteRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_posts_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DeleteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteRequest) ProtoMessage() {}
+
+func (x *DeleteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_posts_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 DeleteRequest.ProtoReflect.Descriptor instead.
+func (*DeleteRequest) Descriptor() ([]byte, []int) {
+ return file_proto_posts_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *DeleteRequest) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+type DeleteResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *DeleteResponse) Reset() {
+ *x = DeleteResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_posts_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DeleteResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteResponse) ProtoMessage() {}
+
+func (x *DeleteResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_posts_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 DeleteResponse.ProtoReflect.Descriptor instead.
+func (*DeleteResponse) Descriptor() ([]byte, []int) {
+ return file_proto_posts_proto_rawDescGZIP(), []int{6}
+}
+
+var File_proto_posts_proto protoreflect.FileDescriptor
+
+var file_proto_posts_proto_rawDesc = []byte{
+ 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x22, 0xc4, 0x02, 0x0a, 0x04, 0x50,
+ 0x6f, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x75,
+ 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6c, 0x75, 0x67, 0x12, 0x18, 0x0a,
+ 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x64, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01,
+ 0x28, 0x03, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61,
+ 0x75, 0x74, 0x68, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x75, 0x74,
+ 0x68, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28,
+ 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
+ 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x73, 0x74,
+ 0x73, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14,
+ 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69,
+ 0x6d, 0x61, 0x67, 0x65, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+ 0x01, 0x22, 0x72, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
+ 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x75, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x04, 0x73, 0x6c, 0x75, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65,
+ 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12,
+ 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05,
+ 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x32, 0x0a, 0x0d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x05, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x50, 0x6f,
+ 0x73, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x22, 0xa4, 0x02, 0x0a, 0x0b, 0x53, 0x61,
+ 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12,
+ 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x75, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73,
+ 0x6c, 0x75, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a,
+ 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x74,
+ 0x61, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12,
+ 0x3c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28,
+ 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e,
+ 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a,
+ 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d,
+ 0x61, 0x67, 0x65, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
+ 0x22, 0x1e, 0x0a, 0x0c, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
+ 0x22, 0x1f, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
+ 0x64, 0x22, 0x10, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x32, 0xa9, 0x01, 0x0a, 0x05, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x34, 0x0a,
+ 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x13, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x51,
+ 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x6f,
+ 0x73, 0x74, 0x73, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x04, 0x53, 0x61, 0x76, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x6f,
+ 0x73, 0x74, 0x73, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x13, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x12, 0x14, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x2e, 0x44,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42,
+ 0x0d, 0x5a, 0x0b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x6f, 0x73, 0x74, 0x73, 0x62, 0x06,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_proto_posts_proto_rawDescOnce sync.Once
+ file_proto_posts_proto_rawDescData = file_proto_posts_proto_rawDesc
+)
+
+func file_proto_posts_proto_rawDescGZIP() []byte {
+ file_proto_posts_proto_rawDescOnce.Do(func() {
+ file_proto_posts_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_posts_proto_rawDescData)
+ })
+ return file_proto_posts_proto_rawDescData
+}
+
+var file_proto_posts_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
+var file_proto_posts_proto_goTypes = []interface{}{
+ (*Post)(nil), // 0: posts.Post
+ (*QueryRequest)(nil), // 1: posts.QueryRequest
+ (*QueryResponse)(nil), // 2: posts.QueryResponse
+ (*SaveRequest)(nil), // 3: posts.SaveRequest
+ (*SaveResponse)(nil), // 4: posts.SaveResponse
+ (*DeleteRequest)(nil), // 5: posts.DeleteRequest
+ (*DeleteResponse)(nil), // 6: posts.DeleteResponse
+ nil, // 7: posts.Post.MetadataEntry
+ nil, // 8: posts.SaveRequest.MetadataEntry
+}
+var file_proto_posts_proto_depIdxs = []int32{
+ 7, // 0: posts.Post.metadata:type_name -> posts.Post.MetadataEntry
+ 0, // 1: posts.QueryResponse.posts:type_name -> posts.Post
+ 8, // 2: posts.SaveRequest.metadata:type_name -> posts.SaveRequest.MetadataEntry
+ 1, // 3: posts.Posts.Query:input_type -> posts.QueryRequest
+ 3, // 4: posts.Posts.Save:input_type -> posts.SaveRequest
+ 5, // 5: posts.Posts.Delete:input_type -> posts.DeleteRequest
+ 2, // 6: posts.Posts.Query:output_type -> posts.QueryResponse
+ 4, // 7: posts.Posts.Save:output_type -> posts.SaveResponse
+ 6, // 8: posts.Posts.Delete:output_type -> posts.DeleteResponse
+ 6, // [6:9] is the sub-list for method output_type
+ 3, // [3:6] is the sub-list for method input_type
+ 3, // [3:3] is the sub-list for extension type_name
+ 3, // [3:3] is the sub-list for extension extendee
+ 0, // [0:3] is the sub-list for field type_name
+}
+
+func init() { file_proto_posts_proto_init() }
+func file_proto_posts_proto_init() {
+ if File_proto_posts_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_proto_posts_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Post); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_posts_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*QueryRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_posts_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*QueryResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_posts_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SaveRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_posts_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SaveResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_posts_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DeleteRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_posts_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DeleteResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_proto_posts_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 9,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_proto_posts_proto_goTypes,
+ DependencyIndexes: file_proto_posts_proto_depIdxs,
+ MessageInfos: file_proto_posts_proto_msgTypes,
+ }.Build()
+ File_proto_posts_proto = out.File
+ file_proto_posts_proto_rawDesc = nil
+ file_proto_posts_proto_goTypes = nil
+ file_proto_posts_proto_depIdxs = nil
+}
diff --git a/posts/proto/posts.pb.micro.go b/posts/proto/posts.pb.micro.go
new file mode 100644
index 0000000..63af18b
--- /dev/null
+++ b/posts/proto/posts.pb.micro.go
@@ -0,0 +1,129 @@
+// Code generated by protoc-gen-micro. DO NOT EDIT.
+// source: proto/posts.proto
+
+package posts
+
+import (
+ fmt "fmt"
+ proto "github.com/golang/protobuf/proto"
+ math "math"
+)
+
+import (
+ context "context"
+ api "github.com/micro/micro/v3/service/api"
+ client "github.com/micro/micro/v3/service/client"
+ server "github.com/micro/micro/v3/service/server"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ api.Endpoint
+var _ context.Context
+var _ client.Option
+var _ server.Option
+
+// Api Endpoints for Posts service
+
+func NewPostsEndpoints() []*api.Endpoint {
+ return []*api.Endpoint{}
+}
+
+// Client API for Posts service
+
+type PostsService interface {
+ // Query currently only supports read by slug or timestamp, no listing.
+ Query(ctx context.Context, in *QueryRequest, opts ...client.CallOption) (*QueryResponse, error)
+ Save(ctx context.Context, in *SaveRequest, opts ...client.CallOption) (*SaveResponse, error)
+ Delete(ctx context.Context, in *DeleteRequest, opts ...client.CallOption) (*DeleteResponse, error)
+}
+
+type postsService struct {
+ c client.Client
+ name string
+}
+
+func NewPostsService(name string, c client.Client) PostsService {
+ return &postsService{
+ c: c,
+ name: name,
+ }
+}
+
+func (c *postsService) Query(ctx context.Context, in *QueryRequest, opts ...client.CallOption) (*QueryResponse, error) {
+ req := c.c.NewRequest(c.name, "Posts.Query", in)
+ out := new(QueryResponse)
+ err := c.c.Call(ctx, req, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *postsService) Save(ctx context.Context, in *SaveRequest, opts ...client.CallOption) (*SaveResponse, error) {
+ req := c.c.NewRequest(c.name, "Posts.Save", in)
+ out := new(SaveResponse)
+ err := c.c.Call(ctx, req, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *postsService) Delete(ctx context.Context, in *DeleteRequest, opts ...client.CallOption) (*DeleteResponse, error) {
+ req := c.c.NewRequest(c.name, "Posts.Delete", in)
+ out := new(DeleteResponse)
+ err := c.c.Call(ctx, req, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// Server API for Posts service
+
+type PostsHandler interface {
+ // Query currently only supports read by slug or timestamp, no listing.
+ Query(context.Context, *QueryRequest, *QueryResponse) error
+ Save(context.Context, *SaveRequest, *SaveResponse) error
+ Delete(context.Context, *DeleteRequest, *DeleteResponse) error
+}
+
+func RegisterPostsHandler(s server.Server, hdlr PostsHandler, opts ...server.HandlerOption) error {
+ type posts interface {
+ Query(ctx context.Context, in *QueryRequest, out *QueryResponse) error
+ Save(ctx context.Context, in *SaveRequest, out *SaveResponse) error
+ Delete(ctx context.Context, in *DeleteRequest, out *DeleteResponse) error
+ }
+ type Posts struct {
+ posts
+ }
+ h := &postsHandler{hdlr}
+ return s.Handle(s.NewHandler(&Posts{h}, opts...))
+}
+
+type postsHandler struct {
+ PostsHandler
+}
+
+func (h *postsHandler) Query(ctx context.Context, in *QueryRequest, out *QueryResponse) error {
+ return h.PostsHandler.Query(ctx, in, out)
+}
+
+func (h *postsHandler) Save(ctx context.Context, in *SaveRequest, out *SaveResponse) error {
+ return h.PostsHandler.Save(ctx, in, out)
+}
+
+func (h *postsHandler) Delete(ctx context.Context, in *DeleteRequest, out *DeleteResponse) error {
+ return h.PostsHandler.Delete(ctx, in, out)
+}
diff --git a/blog/posts/proto/posts.proto b/posts/proto/posts.proto
similarity index 97%
rename from blog/posts/proto/posts.proto
rename to posts/proto/posts.proto
index 2ae8122..5fa7412 100644
--- a/blog/posts/proto/posts.proto
+++ b/posts/proto/posts.proto
@@ -1,6 +1,7 @@
syntax = "proto3";
package posts;
+option go_package = "proto;posts";
service Posts {
// Query currently only supports read by slug or timestamp, no listing.
diff --git a/routing/Makefile b/routing/Makefile
index 0e9a33f..462b088 100644
--- a/routing/Makefile
+++ b/routing/Makefile
@@ -7,8 +7,13 @@ init:
go get github.com/micro/micro/v3/cmd/protoc-gen-micro
.PHONY: proto
proto:
- protoc --proto_path=. --micro_out=. --go_out=:. proto/routing.proto
-
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/routing.proto
+
+.PHONY: docs
+docs:
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/routing.proto
+ @redoc-cli bundle api-protobuf.json
+
.PHONY: build
build:
go build -o routing *.go
diff --git a/routing/README.md b/routing/README.md
index 5890d58..91d46b1 100644
--- a/routing/README.md
+++ b/routing/README.md
@@ -1,4 +1,5 @@
+The routing service provides point to point directions.
+
# Routing Service
-The routing service provides point to point directions
-
+Readme coming soon. For more info see the [proto](https://github.com/micro/services/blob/master/routing/proto/routing.proto).
diff --git a/routing/proto/routing.pb.go b/routing/proto/routing.pb.go
index 501e774..5c3dc59 100644
--- a/routing/proto/routing.pb.go
+++ b/routing/proto/routing.pb.go
@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.23.0
-// protoc v3.13.0
+// protoc-gen-go v1.25.0
+// protoc v3.6.1
// source: proto/routing.proto
package routing
@@ -212,8 +212,9 @@ var file_proto_routing_proto_rawDesc = []byte{
0x67, 0x12, 0x38, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x72, 0x6f, 0x75,
0x74, 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x16, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x6f, 0x75, 0x74,
- 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x33,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0f, 0x5a, 0x0d, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/routing/proto/routing.proto b/routing/proto/routing.proto
index fde7762..917aea1 100644
--- a/routing/proto/routing.proto
+++ b/routing/proto/routing.proto
@@ -1,6 +1,8 @@
syntax = "proto3";
package routing;
+option go_package = "proto;routing";
+
import "google/protobuf/wrappers.proto";
service Routing {
diff --git a/scripts/generate-docs.sh b/scripts/generate-docs.sh
new file mode 100644
index 0000000..23ad27c
--- /dev/null
+++ b/scripts/generate-docs.sh
@@ -0,0 +1,27 @@
+mkdir docs
+mkdir ./docs/hugo-tania/site/content/post
+echo "services.m3o.com" > docs/CNAME
+dir=$(pwd)
+for d in */; do
+ cd $dir
+ echo $d
+ cd $d
+ if test -f "./skip"; then
+ continue
+ fi
+ serviceName=${d//\//}
+ contentFolder=../docs/hugo-tania/site/content/post
+ timeout 3s make proto || continue
+ echo "Copying html for $serviceName"
+ pwd
+ touch $contentFolder/$serviceName.md
+ echo -e "---\ntitle: $serviceName\n---\n" > $contentFolder/$serviceName.md
+ cat README.md >> $contentFolder/$serviceName.md
+ mkdir -p ../docs/$serviceName/api
+ cp redoc-static.html ../docs/$serviceName/api/index.html
+done
+pwd
+cd ../docs/hugo-tania/site; hugo -D -d=../../
+cd ../../
+pwd
+ls
diff --git a/scripts/skip b/scripts/skip
new file mode 100644
index 0000000..e69de29
diff --git a/blog/tags/.gitignore b/tags/.gitignore
similarity index 100%
rename from blog/tags/.gitignore
rename to tags/.gitignore
diff --git a/blog/tags/Dockerfile b/tags/Dockerfile
similarity index 100%
rename from blog/tags/Dockerfile
rename to tags/Dockerfile
diff --git a/blog/tags/Makefile b/tags/Makefile
similarity index 55%
rename from blog/tags/Makefile
rename to tags/Makefile
index 17bcbfb..1ba6219 100644
--- a/blog/tags/Makefile
+++ b/tags/Makefile
@@ -5,8 +5,13 @@ MODIFY=Mgithub.com/micro/micro/proto/api/api.proto=github.com/micro/micro/v3/pro
.PHONY: proto
proto:
- protoc --proto_path=. --micro_out=${MODIFY}:. --go_out=${MODIFY}:. proto/tags.proto
+ protoc --openapi_out=. --proto_path=. --micro_out=${MODIFY}:. --go_out=${MODIFY}:. proto/tags.proto
+
+.PHONY: docs
+docs:
+ protoc --openapi_out=. --proto_path=. --micro_out=${MODIFY}:. --go_out=${MODIFY}:. proto/tags.proto
+ @redoc-cli bundle api-tags.json
.PHONY: build
build: proto
diff --git a/blog/tags/README.md b/tags/README.md
similarity index 70%
rename from blog/tags/README.md
rename to tags/README.md
index 0a89de4..1212c2b 100644
--- a/blog/tags/README.md
+++ b/tags/README.md
@@ -1,6 +1,6 @@
-# Tag Service
+Tag any resource by savin a tag associated with their ID in the tag service.
-This is the Tag service
+# Tag Service
## Query tags
@@ -16,9 +16,12 @@ micro new --namespace=go.micro --type=service tag
## Getting Started
-- [Configuration](#configuration)
-- [Dependencies](#dependencies)
-- [Usage](#usage)
+- [Tag Service](#tag-service)
+ - [Query tags](#query-tags)
+ - [Getting Started](#getting-started)
+ - [Configuration](#configuration)
+ - [Dependencies](#dependencies)
+ - [Usage](#usage)
## Configuration
diff --git a/blog/tags/generate.go b/tags/generate.go
similarity index 100%
rename from blog/tags/generate.go
rename to tags/generate.go
diff --git a/tags/github.com/micro/services/tags/proto/tags.pb.go b/tags/github.com/micro/services/tags/proto/tags.pb.go
new file mode 100644
index 0000000..e89d16a
--- /dev/null
+++ b/tags/github.com/micro/services/tags/proto/tags.pb.go
@@ -0,0 +1,779 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.6.1
+// source: proto/tags.proto
+
+package tags
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ 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)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type Tag struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Type is useful for namespacing and listing across resources,
+ // ie. list tags for posts, customers etc.
+ Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
+ Slug string `protobuf:"bytes,2,opt,name=slug,proto3" json:"slug,omitempty"`
+ Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
+ Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
+ Count int64 `protobuf:"varint,5,opt,name=count,proto3" json:"count,omitempty"`
+}
+
+func (x *Tag) Reset() {
+ *x = Tag{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Tag) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Tag) ProtoMessage() {}
+
+func (x *Tag) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 Tag.ProtoReflect.Descriptor instead.
+func (*Tag) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Tag) GetType() string {
+ if x != nil {
+ return x.Type
+ }
+ return ""
+}
+
+func (x *Tag) GetSlug() string {
+ if x != nil {
+ return x.Slug
+ }
+ return ""
+}
+
+func (x *Tag) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *Tag) GetDescription() string {
+ if x != nil {
+ return x.Description
+ }
+ return ""
+}
+
+func (x *Tag) GetCount() int64 {
+ if x != nil {
+ return x.Count
+ }
+ return 0
+}
+
+type AddRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ResourceID string `protobuf:"bytes,1,opt,name=resourceID,proto3" json:"resourceID,omitempty"`
+ Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
+ Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
+ ResourceCreated int64 `protobuf:"varint,4,opt,name=resourceCreated,proto3" json:"resourceCreated,omitempty"`
+}
+
+func (x *AddRequest) Reset() {
+ *x = AddRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *AddRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddRequest) ProtoMessage() {}
+
+func (x *AddRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 AddRequest.ProtoReflect.Descriptor instead.
+func (*AddRequest) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *AddRequest) GetResourceID() string {
+ if x != nil {
+ return x.ResourceID
+ }
+ return ""
+}
+
+func (x *AddRequest) GetType() string {
+ if x != nil {
+ return x.Type
+ }
+ return ""
+}
+
+func (x *AddRequest) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *AddRequest) GetResourceCreated() int64 {
+ if x != nil {
+ return x.ResourceCreated
+ }
+ return 0
+}
+
+type AddResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *AddResponse) Reset() {
+ *x = AddResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *AddResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddResponse) ProtoMessage() {}
+
+func (x *AddResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 AddResponse.ProtoReflect.Descriptor instead.
+func (*AddResponse) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{2}
+}
+
+type RemoveRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ResourceID string `protobuf:"bytes,1,opt,name=resourceID,proto3" json:"resourceID,omitempty"`
+ Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
+ Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
+}
+
+func (x *RemoveRequest) Reset() {
+ *x = RemoveRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *RemoveRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RemoveRequest) ProtoMessage() {}
+
+func (x *RemoveRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 RemoveRequest.ProtoReflect.Descriptor instead.
+func (*RemoveRequest) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *RemoveRequest) GetResourceID() string {
+ if x != nil {
+ return x.ResourceID
+ }
+ return ""
+}
+
+func (x *RemoveRequest) GetType() string {
+ if x != nil {
+ return x.Type
+ }
+ return ""
+}
+
+func (x *RemoveRequest) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+type RemoveResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *RemoveResponse) Reset() {
+ *x = RemoveResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *RemoveResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RemoveResponse) ProtoMessage() {}
+
+func (x *RemoveResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 RemoveResponse.ProtoReflect.Descriptor instead.
+func (*RemoveResponse) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{4}
+}
+
+type UpdateRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
+ Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
+ Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
+}
+
+func (x *UpdateRequest) Reset() {
+ *x = UpdateRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *UpdateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdateRequest) ProtoMessage() {}
+
+func (x *UpdateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 UpdateRequest.ProtoReflect.Descriptor instead.
+func (*UpdateRequest) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *UpdateRequest) GetType() string {
+ if x != nil {
+ return x.Type
+ }
+ return ""
+}
+
+func (x *UpdateRequest) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *UpdateRequest) GetDescription() string {
+ if x != nil {
+ return x.Description
+ }
+ return ""
+}
+
+type UpdateResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *UpdateResponse) Reset() {
+ *x = UpdateResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *UpdateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdateResponse) ProtoMessage() {}
+
+func (x *UpdateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 UpdateResponse.ProtoReflect.Descriptor instead.
+func (*UpdateResponse) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{6}
+}
+
+// ListRequest: list either by resource id or type.
+// Optionally filter by min or max count.
+type ListRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ResourceID string `protobuf:"bytes,1,opt,name=resourceID,proto3" json:"resourceID,omitempty"`
+ Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
+ MinCount int64 `protobuf:"varint,3,opt,name=minCount,proto3" json:"minCount,omitempty"`
+ MaxCount int64 `protobuf:"varint,4,opt,name=maxCount,proto3" json:"maxCount,omitempty"`
+}
+
+func (x *ListRequest) Reset() {
+ *x = ListRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListRequest) ProtoMessage() {}
+
+func (x *ListRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 ListRequest.ProtoReflect.Descriptor instead.
+func (*ListRequest) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *ListRequest) GetResourceID() string {
+ if x != nil {
+ return x.ResourceID
+ }
+ return ""
+}
+
+func (x *ListRequest) GetType() string {
+ if x != nil {
+ return x.Type
+ }
+ return ""
+}
+
+func (x *ListRequest) GetMinCount() int64 {
+ if x != nil {
+ return x.MinCount
+ }
+ return 0
+}
+
+func (x *ListRequest) GetMaxCount() int64 {
+ if x != nil {
+ return x.MaxCount
+ }
+ return 0
+}
+
+type ListResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Tags []*Tag `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"`
+}
+
+func (x *ListResponse) Reset() {
+ *x = ListResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListResponse) ProtoMessage() {}
+
+func (x *ListResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 ListResponse.ProtoReflect.Descriptor instead.
+func (*ListResponse) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *ListResponse) GetTags() []*Tag {
+ if x != nil {
+ return x.Tags
+ }
+ return nil
+}
+
+var File_proto_tags_proto protoreflect.FileDescriptor
+
+var file_proto_tags_proto_rawDesc = []byte{
+ 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x12, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x7b, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12,
+ 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74,
+ 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x75, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x04, 0x73, 0x6c, 0x75, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a,
+ 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+ 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05,
+ 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x28,
+ 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x0d, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65,
+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05,
+ 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x22, 0x10, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12,
+ 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x22, 0x10, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x79, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x44,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75,
+ 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75,
+ 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x2d,
+ 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d,
+ 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x74,
+ 0x61, 0x67, 0x73, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x32, 0xd3, 0x01,
+ 0x0a, 0x04, 0x54, 0x61, 0x67, 0x73, 0x12, 0x2c, 0x0a, 0x03, 0x41, 0x64, 0x64, 0x12, 0x10, 0x2e,
+ 0x74, 0x61, 0x67, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x11, 0x2e, 0x74, 0x61, 0x67, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x13,
+ 0x2e, 0x74, 0x61, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x74, 0x61, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x04, 0x4c,
+ 0x69, 0x73, 0x74, 0x12, 0x11, 0x2e, 0x74, 0x61, 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x74, 0x61, 0x67, 0x73, 0x2e, 0x4c, 0x69,
+ 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x06,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x13, 0x2e, 0x74, 0x61, 0x67, 0x73, 0x2e, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x74, 0x61,
+ 0x67, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x42, 0x2b, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x2f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
+ 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x74, 0x61, 0x67, 0x73,
+ 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_proto_tags_proto_rawDescOnce sync.Once
+ file_proto_tags_proto_rawDescData = file_proto_tags_proto_rawDesc
+)
+
+func file_proto_tags_proto_rawDescGZIP() []byte {
+ file_proto_tags_proto_rawDescOnce.Do(func() {
+ file_proto_tags_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_tags_proto_rawDescData)
+ })
+ return file_proto_tags_proto_rawDescData
+}
+
+var file_proto_tags_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
+var file_proto_tags_proto_goTypes = []interface{}{
+ (*Tag)(nil), // 0: tags.Tag
+ (*AddRequest)(nil), // 1: tags.AddRequest
+ (*AddResponse)(nil), // 2: tags.AddResponse
+ (*RemoveRequest)(nil), // 3: tags.RemoveRequest
+ (*RemoveResponse)(nil), // 4: tags.RemoveResponse
+ (*UpdateRequest)(nil), // 5: tags.UpdateRequest
+ (*UpdateResponse)(nil), // 6: tags.UpdateResponse
+ (*ListRequest)(nil), // 7: tags.ListRequest
+ (*ListResponse)(nil), // 8: tags.ListResponse
+}
+var file_proto_tags_proto_depIdxs = []int32{
+ 0, // 0: tags.ListResponse.tags:type_name -> tags.Tag
+ 1, // 1: tags.Tags.Add:input_type -> tags.AddRequest
+ 3, // 2: tags.Tags.Remove:input_type -> tags.RemoveRequest
+ 7, // 3: tags.Tags.List:input_type -> tags.ListRequest
+ 5, // 4: tags.Tags.Update:input_type -> tags.UpdateRequest
+ 2, // 5: tags.Tags.Add:output_type -> tags.AddResponse
+ 4, // 6: tags.Tags.Remove:output_type -> tags.RemoveResponse
+ 8, // 7: tags.Tags.List:output_type -> tags.ListResponse
+ 6, // 8: tags.Tags.Update:output_type -> tags.UpdateResponse
+ 5, // [5:9] is the sub-list for method output_type
+ 1, // [1:5] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_proto_tags_proto_init() }
+func file_proto_tags_proto_init() {
+ if File_proto_tags_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_proto_tags_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Tag); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*AddRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*AddResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*RemoveRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*RemoveResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*UpdateRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*UpdateResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_proto_tags_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 9,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_proto_tags_proto_goTypes,
+ DependencyIndexes: file_proto_tags_proto_depIdxs,
+ MessageInfos: file_proto_tags_proto_msgTypes,
+ }.Build()
+ File_proto_tags_proto = out.File
+ file_proto_tags_proto_rawDesc = nil
+ file_proto_tags_proto_goTypes = nil
+ file_proto_tags_proto_depIdxs = nil
+}
diff --git a/blog/tags/proto/tags.pb.micro.go b/tags/github.com/micro/services/tags/proto/tags.pb.micro.go
similarity index 98%
rename from blog/tags/proto/tags.pb.micro.go
rename to tags/github.com/micro/services/tags/proto/tags.pb.micro.go
index c87b47a..029b1ec 100644
--- a/blog/tags/proto/tags.pb.micro.go
+++ b/tags/github.com/micro/services/tags/proto/tags.pb.micro.go
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-micro. DO NOT EDIT.
-// source: github.com/micro/services/blog/tags/proto/tags.proto
+// source: proto/tags.proto
package tags
diff --git a/blog/tags/handler/tags.go b/tags/handler/tags.go
similarity index 99%
rename from blog/tags/handler/tags.go
rename to tags/handler/tags.go
index 21345ee..e244851 100644
--- a/blog/tags/handler/tags.go
+++ b/tags/handler/tags.go
@@ -11,7 +11,7 @@ import (
"github.com/micro/micro/v3/service/errors"
"github.com/micro/micro/v3/service/logger"
"github.com/micro/micro/v3/service/store"
- proto "github.com/micro/services/blog/tags/proto"
+ proto "github.com/micro/services/tags/proto"
)
const (
diff --git a/blog/tags/main.go b/tags/main.go
similarity index 87%
rename from blog/tags/main.go
rename to tags/main.go
index 43e1221..27d2cfe 100644
--- a/blog/tags/main.go
+++ b/tags/main.go
@@ -4,7 +4,7 @@ import (
"github.com/micro/micro/v3/service"
"github.com/micro/micro/v3/service/logger"
- "github.com/micro/services/blog/tags/handler"
+ "github.com/micro/services/tags/handler"
)
func main() {
diff --git a/blog/tags/micro.mu b/tags/micro.mu
similarity index 100%
rename from blog/tags/micro.mu
rename to tags/micro.mu
diff --git a/tags/proto/tags.pb.go b/tags/proto/tags.pb.go
new file mode 100644
index 0000000..ac924e2
--- /dev/null
+++ b/tags/proto/tags.pb.go
@@ -0,0 +1,777 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.6.1
+// source: proto/tags.proto
+
+package tags
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ 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)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type Tag struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Type is useful for namespacing and listing across resources,
+ // ie. list tags for posts, customers etc.
+ Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
+ Slug string `protobuf:"bytes,2,opt,name=slug,proto3" json:"slug,omitempty"`
+ Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
+ Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
+ Count int64 `protobuf:"varint,5,opt,name=count,proto3" json:"count,omitempty"`
+}
+
+func (x *Tag) Reset() {
+ *x = Tag{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Tag) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Tag) ProtoMessage() {}
+
+func (x *Tag) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 Tag.ProtoReflect.Descriptor instead.
+func (*Tag) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Tag) GetType() string {
+ if x != nil {
+ return x.Type
+ }
+ return ""
+}
+
+func (x *Tag) GetSlug() string {
+ if x != nil {
+ return x.Slug
+ }
+ return ""
+}
+
+func (x *Tag) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *Tag) GetDescription() string {
+ if x != nil {
+ return x.Description
+ }
+ return ""
+}
+
+func (x *Tag) GetCount() int64 {
+ if x != nil {
+ return x.Count
+ }
+ return 0
+}
+
+type AddRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ResourceID string `protobuf:"bytes,1,opt,name=resourceID,proto3" json:"resourceID,omitempty"`
+ Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
+ Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
+ ResourceCreated int64 `protobuf:"varint,4,opt,name=resourceCreated,proto3" json:"resourceCreated,omitempty"`
+}
+
+func (x *AddRequest) Reset() {
+ *x = AddRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *AddRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddRequest) ProtoMessage() {}
+
+func (x *AddRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 AddRequest.ProtoReflect.Descriptor instead.
+func (*AddRequest) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *AddRequest) GetResourceID() string {
+ if x != nil {
+ return x.ResourceID
+ }
+ return ""
+}
+
+func (x *AddRequest) GetType() string {
+ if x != nil {
+ return x.Type
+ }
+ return ""
+}
+
+func (x *AddRequest) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *AddRequest) GetResourceCreated() int64 {
+ if x != nil {
+ return x.ResourceCreated
+ }
+ return 0
+}
+
+type AddResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *AddResponse) Reset() {
+ *x = AddResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *AddResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddResponse) ProtoMessage() {}
+
+func (x *AddResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 AddResponse.ProtoReflect.Descriptor instead.
+func (*AddResponse) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{2}
+}
+
+type RemoveRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ResourceID string `protobuf:"bytes,1,opt,name=resourceID,proto3" json:"resourceID,omitempty"`
+ Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
+ Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
+}
+
+func (x *RemoveRequest) Reset() {
+ *x = RemoveRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *RemoveRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RemoveRequest) ProtoMessage() {}
+
+func (x *RemoveRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 RemoveRequest.ProtoReflect.Descriptor instead.
+func (*RemoveRequest) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *RemoveRequest) GetResourceID() string {
+ if x != nil {
+ return x.ResourceID
+ }
+ return ""
+}
+
+func (x *RemoveRequest) GetType() string {
+ if x != nil {
+ return x.Type
+ }
+ return ""
+}
+
+func (x *RemoveRequest) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+type RemoveResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *RemoveResponse) Reset() {
+ *x = RemoveResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *RemoveResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RemoveResponse) ProtoMessage() {}
+
+func (x *RemoveResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 RemoveResponse.ProtoReflect.Descriptor instead.
+func (*RemoveResponse) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{4}
+}
+
+type UpdateRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
+ Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
+ Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
+}
+
+func (x *UpdateRequest) Reset() {
+ *x = UpdateRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *UpdateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdateRequest) ProtoMessage() {}
+
+func (x *UpdateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 UpdateRequest.ProtoReflect.Descriptor instead.
+func (*UpdateRequest) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *UpdateRequest) GetType() string {
+ if x != nil {
+ return x.Type
+ }
+ return ""
+}
+
+func (x *UpdateRequest) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *UpdateRequest) GetDescription() string {
+ if x != nil {
+ return x.Description
+ }
+ return ""
+}
+
+type UpdateResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *UpdateResponse) Reset() {
+ *x = UpdateResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *UpdateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdateResponse) ProtoMessage() {}
+
+func (x *UpdateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 UpdateResponse.ProtoReflect.Descriptor instead.
+func (*UpdateResponse) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{6}
+}
+
+// ListRequest: list either by resource id or type.
+// Optionally filter by min or max count.
+type ListRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ResourceID string `protobuf:"bytes,1,opt,name=resourceID,proto3" json:"resourceID,omitempty"`
+ Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
+ MinCount int64 `protobuf:"varint,3,opt,name=minCount,proto3" json:"minCount,omitempty"`
+ MaxCount int64 `protobuf:"varint,4,opt,name=maxCount,proto3" json:"maxCount,omitempty"`
+}
+
+func (x *ListRequest) Reset() {
+ *x = ListRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListRequest) ProtoMessage() {}
+
+func (x *ListRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 ListRequest.ProtoReflect.Descriptor instead.
+func (*ListRequest) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *ListRequest) GetResourceID() string {
+ if x != nil {
+ return x.ResourceID
+ }
+ return ""
+}
+
+func (x *ListRequest) GetType() string {
+ if x != nil {
+ return x.Type
+ }
+ return ""
+}
+
+func (x *ListRequest) GetMinCount() int64 {
+ if x != nil {
+ return x.MinCount
+ }
+ return 0
+}
+
+func (x *ListRequest) GetMaxCount() int64 {
+ if x != nil {
+ return x.MaxCount
+ }
+ return 0
+}
+
+type ListResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Tags []*Tag `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"`
+}
+
+func (x *ListResponse) Reset() {
+ *x = ListResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_tags_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListResponse) ProtoMessage() {}
+
+func (x *ListResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_tags_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 ListResponse.ProtoReflect.Descriptor instead.
+func (*ListResponse) Descriptor() ([]byte, []int) {
+ return file_proto_tags_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *ListResponse) GetTags() []*Tag {
+ if x != nil {
+ return x.Tags
+ }
+ return nil
+}
+
+var File_proto_tags_proto protoreflect.FileDescriptor
+
+var file_proto_tags_proto_rawDesc = []byte{
+ 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x12, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x7b, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12,
+ 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74,
+ 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x75, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x04, 0x73, 0x6c, 0x75, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a,
+ 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+ 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05,
+ 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x28,
+ 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x0d, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65,
+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05,
+ 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x22, 0x10, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12,
+ 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x22, 0x10, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x79, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x44,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75,
+ 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75,
+ 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x2d,
+ 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d,
+ 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x74,
+ 0x61, 0x67, 0x73, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x32, 0xd3, 0x01,
+ 0x0a, 0x04, 0x54, 0x61, 0x67, 0x73, 0x12, 0x2c, 0x0a, 0x03, 0x41, 0x64, 0x64, 0x12, 0x10, 0x2e,
+ 0x74, 0x61, 0x67, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x11, 0x2e, 0x74, 0x61, 0x67, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x13,
+ 0x2e, 0x74, 0x61, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x74, 0x61, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x04, 0x4c,
+ 0x69, 0x73, 0x74, 0x12, 0x11, 0x2e, 0x74, 0x61, 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x74, 0x61, 0x67, 0x73, 0x2e, 0x4c, 0x69,
+ 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x06,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x13, 0x2e, 0x74, 0x61, 0x67, 0x73, 0x2e, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x74, 0x61,
+ 0x67, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x42, 0x0c, 0x5a, 0x0a, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x74, 0x61, 0x67,
+ 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_proto_tags_proto_rawDescOnce sync.Once
+ file_proto_tags_proto_rawDescData = file_proto_tags_proto_rawDesc
+)
+
+func file_proto_tags_proto_rawDescGZIP() []byte {
+ file_proto_tags_proto_rawDescOnce.Do(func() {
+ file_proto_tags_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_tags_proto_rawDescData)
+ })
+ return file_proto_tags_proto_rawDescData
+}
+
+var file_proto_tags_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
+var file_proto_tags_proto_goTypes = []interface{}{
+ (*Tag)(nil), // 0: tags.Tag
+ (*AddRequest)(nil), // 1: tags.AddRequest
+ (*AddResponse)(nil), // 2: tags.AddResponse
+ (*RemoveRequest)(nil), // 3: tags.RemoveRequest
+ (*RemoveResponse)(nil), // 4: tags.RemoveResponse
+ (*UpdateRequest)(nil), // 5: tags.UpdateRequest
+ (*UpdateResponse)(nil), // 6: tags.UpdateResponse
+ (*ListRequest)(nil), // 7: tags.ListRequest
+ (*ListResponse)(nil), // 8: tags.ListResponse
+}
+var file_proto_tags_proto_depIdxs = []int32{
+ 0, // 0: tags.ListResponse.tags:type_name -> tags.Tag
+ 1, // 1: tags.Tags.Add:input_type -> tags.AddRequest
+ 3, // 2: tags.Tags.Remove:input_type -> tags.RemoveRequest
+ 7, // 3: tags.Tags.List:input_type -> tags.ListRequest
+ 5, // 4: tags.Tags.Update:input_type -> tags.UpdateRequest
+ 2, // 5: tags.Tags.Add:output_type -> tags.AddResponse
+ 4, // 6: tags.Tags.Remove:output_type -> tags.RemoveResponse
+ 8, // 7: tags.Tags.List:output_type -> tags.ListResponse
+ 6, // 8: tags.Tags.Update:output_type -> tags.UpdateResponse
+ 5, // [5:9] is the sub-list for method output_type
+ 1, // [1:5] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_proto_tags_proto_init() }
+func file_proto_tags_proto_init() {
+ if File_proto_tags_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_proto_tags_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Tag); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*AddRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*AddResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*RemoveRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*RemoveResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*UpdateRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*UpdateResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_tags_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_proto_tags_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 9,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_proto_tags_proto_goTypes,
+ DependencyIndexes: file_proto_tags_proto_depIdxs,
+ MessageInfos: file_proto_tags_proto_msgTypes,
+ }.Build()
+ File_proto_tags_proto = out.File
+ file_proto_tags_proto_rawDesc = nil
+ file_proto_tags_proto_goTypes = nil
+ file_proto_tags_proto_depIdxs = nil
+}
diff --git a/tags/proto/tags.pb.micro.go b/tags/proto/tags.pb.micro.go
new file mode 100644
index 0000000..029b1ec
--- /dev/null
+++ b/tags/proto/tags.pb.micro.go
@@ -0,0 +1,152 @@
+// Code generated by protoc-gen-micro. DO NOT EDIT.
+// source: proto/tags.proto
+
+package tags
+
+import (
+ fmt "fmt"
+ proto "github.com/golang/protobuf/proto"
+ math "math"
+)
+
+import (
+ context "context"
+ api "github.com/micro/micro/v3/service/api"
+ client "github.com/micro/micro/v3/service/client"
+ server "github.com/micro/micro/v3/service/server"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ api.Endpoint
+var _ context.Context
+var _ client.Option
+var _ server.Option
+
+// Api Endpoints for Tags service
+
+func NewTagsEndpoints() []*api.Endpoint {
+ return []*api.Endpoint{}
+}
+
+// Client API for Tags service
+
+type TagsService interface {
+ // Add a tag to a resource
+ Add(ctx context.Context, in *AddRequest, opts ...client.CallOption) (*AddResponse, error)
+ // Remove a tag from a resource
+ Remove(ctx context.Context, in *RemoveRequest, opts ...client.CallOption) (*RemoveResponse, error)
+ // List tags by
+ List(ctx context.Context, in *ListRequest, opts ...client.CallOption) (*ListResponse, error)
+ // Change properties of a tag, currently only the title and description
+ Update(ctx context.Context, in *UpdateRequest, opts ...client.CallOption) (*UpdateResponse, error)
+}
+
+type tagsService struct {
+ c client.Client
+ name string
+}
+
+func NewTagsService(name string, c client.Client) TagsService {
+ return &tagsService{
+ c: c,
+ name: name,
+ }
+}
+
+func (c *tagsService) Add(ctx context.Context, in *AddRequest, opts ...client.CallOption) (*AddResponse, error) {
+ req := c.c.NewRequest(c.name, "Tags.Add", in)
+ out := new(AddResponse)
+ err := c.c.Call(ctx, req, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *tagsService) Remove(ctx context.Context, in *RemoveRequest, opts ...client.CallOption) (*RemoveResponse, error) {
+ req := c.c.NewRequest(c.name, "Tags.Remove", in)
+ out := new(RemoveResponse)
+ err := c.c.Call(ctx, req, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *tagsService) List(ctx context.Context, in *ListRequest, opts ...client.CallOption) (*ListResponse, error) {
+ req := c.c.NewRequest(c.name, "Tags.List", in)
+ out := new(ListResponse)
+ err := c.c.Call(ctx, req, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *tagsService) Update(ctx context.Context, in *UpdateRequest, opts ...client.CallOption) (*UpdateResponse, error) {
+ req := c.c.NewRequest(c.name, "Tags.Update", in)
+ out := new(UpdateResponse)
+ err := c.c.Call(ctx, req, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// Server API for Tags service
+
+type TagsHandler interface {
+ // Add a tag to a resource
+ Add(context.Context, *AddRequest, *AddResponse) error
+ // Remove a tag from a resource
+ Remove(context.Context, *RemoveRequest, *RemoveResponse) error
+ // List tags by
+ List(context.Context, *ListRequest, *ListResponse) error
+ // Change properties of a tag, currently only the title and description
+ Update(context.Context, *UpdateRequest, *UpdateResponse) error
+}
+
+func RegisterTagsHandler(s server.Server, hdlr TagsHandler, opts ...server.HandlerOption) error {
+ type tags interface {
+ Add(ctx context.Context, in *AddRequest, out *AddResponse) error
+ Remove(ctx context.Context, in *RemoveRequest, out *RemoveResponse) error
+ List(ctx context.Context, in *ListRequest, out *ListResponse) error
+ Update(ctx context.Context, in *UpdateRequest, out *UpdateResponse) error
+ }
+ type Tags struct {
+ tags
+ }
+ h := &tagsHandler{hdlr}
+ return s.Handle(s.NewHandler(&Tags{h}, opts...))
+}
+
+type tagsHandler struct {
+ TagsHandler
+}
+
+func (h *tagsHandler) Add(ctx context.Context, in *AddRequest, out *AddResponse) error {
+ return h.TagsHandler.Add(ctx, in, out)
+}
+
+func (h *tagsHandler) Remove(ctx context.Context, in *RemoveRequest, out *RemoveResponse) error {
+ return h.TagsHandler.Remove(ctx, in, out)
+}
+
+func (h *tagsHandler) List(ctx context.Context, in *ListRequest, out *ListResponse) error {
+ return h.TagsHandler.List(ctx, in, out)
+}
+
+func (h *tagsHandler) Update(ctx context.Context, in *UpdateRequest, out *UpdateResponse) error {
+ return h.TagsHandler.Update(ctx, in, out)
+}
diff --git a/blog/tags/proto/tags.proto b/tags/proto/tags.proto
similarity index 97%
rename from blog/tags/proto/tags.proto
rename to tags/proto/tags.proto
index d561a4f..cd5061e 100644
--- a/blog/tags/proto/tags.proto
+++ b/tags/proto/tags.proto
@@ -1,6 +1,7 @@
syntax = "proto3";
package tags;
+option go_package = "proto;tags";
service Tags {
// Add a tag to a resource
diff --git a/test/integration/blog/blog_test.go b/test/integration/blog/blog_test.go
index e5a0ec8..79931c9 100644
--- a/test/integration/blog/blog_test.go
+++ b/test/integration/blog/blog_test.go
@@ -14,7 +14,7 @@ import (
"time"
"github.com/micro/micro/v3/test"
- p "github.com/micro/services/blog/posts/proto"
+ p "github.com/micro/services/posts/proto"
)
const (
@@ -58,8 +58,8 @@ func setupBlogTests(serv test.Server, t *test.T) {
envVar string
deflt string
}{
- {envVar: "POSTS_SVC", deflt: "../../../blog/posts"},
- {envVar: "TAGS_SVC", deflt: "../../../blog/tags"},
+ {envVar: "POSTS_SVC", deflt: "../../../posts"},
+ {envVar: "TAGS_SVC", deflt: "../../../tags"},
}
for _, v := range services {
diff --git a/test/skip b/test/skip
new file mode 100644
index 0000000..e69de29
diff --git a/test/template/Makefile b/test/template/Makefile
index cf029ef..2781b93 100644
--- a/test/template/Makefile
+++ b/test/template/Makefile
@@ -2,8 +2,13 @@
GOPATH:=$(shell go env GOPATH)
.PHONY: proto
proto:
- protoc --proto_path=. --micro_out=. --go_out=:. proto/idiomatic.proto
-
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/idiomatic.proto
+
+.PHONY: docs
+docs:
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/idiomatic.proto
+ @redoc-cli bundle api-protobuf.json
+
.PHONY: build
build:
go build -o idiomatic *.go
diff --git a/test/template/proto/idiomatic.proto b/test/template/proto/idiomatic.proto
index eeca0d9..58ce947 100644
--- a/test/template/proto/idiomatic.proto
+++ b/test/template/proto/idiomatic.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
package idiomatic;
-option go_package = "github.com/micro/services/test/template/proto;idiomatic";
+option go_package = "proto;idiomatic";
service Idiomatic {
rpc Call(Request) returns (Response) {}
diff --git a/users/Makefile b/users/Makefile
index ddbb866..8702253 100644
--- a/users/Makefile
+++ b/users/Makefile
@@ -7,8 +7,13 @@ init:
go get github.com/micro/micro/v3/cmd/protoc-gen-micro
.PHONY: proto
proto:
- protoc --proto_path=. --micro_out=. --go_out=:. proto/users.proto
-
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/users.proto
+
+.PHONY: docs
+docs:
+ protoc --openapi_out=. --proto_path=. --micro_out=. --go_out=:. proto/users.proto
+ @redoc-cli bundle api-users.json
+
.PHONY: build
build:
go build -o users *.go
diff --git a/users/README.md b/users/README.md
index e687e5b..089881f 100644
--- a/users/README.md
+++ b/users/README.md
@@ -1,7 +1,7 @@
-# Users Service
-
A user service for storing accounts and simple auth.
+# Users Service
+
## Getting started
```
diff --git a/users/proto/users.pb.go b/users/proto/users.pb.go
index e709ffa..61a5d4e 100644
--- a/users/proto/users.pb.go
+++ b/users/proto/users.pb.go
@@ -1,998 +1,1546 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.6.1
// source: proto/users.proto
package users
import (
- fmt "fmt"
proto "github.com/golang/protobuf/proto"
- math "math"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
)
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
+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)
+)
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
type User struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"`
- Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
- Created int64 `protobuf:"varint,4,opt,name=created,proto3" json:"created,omitempty"`
- Updated int64 `protobuf:"varint,5,opt,name=updated,proto3" json:"updated,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // uuid
+ Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` // alphanumeric user or org
+ Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
+ Created int64 `protobuf:"varint,4,opt,name=created,proto3" json:"created,omitempty"` // unix
+ Updated int64 `protobuf:"varint,5,opt,name=updated,proto3" json:"updated,omitempty"` // unix
}
-func (m *User) Reset() { *m = User{} }
-func (m *User) String() string { return proto.CompactTextString(m) }
-func (*User) ProtoMessage() {}
+func (x *User) Reset() {
+ *x = User{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *User) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*User) ProtoMessage() {}
+
+func (x *User) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 User.ProtoReflect.Descriptor instead.
func (*User) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{0}
+ return file_proto_users_proto_rawDescGZIP(), []int{0}
}
-func (m *User) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_User.Unmarshal(m, b)
-}
-func (m *User) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_User.Marshal(b, m, deterministic)
-}
-func (m *User) XXX_Merge(src proto.Message) {
- xxx_messageInfo_User.Merge(m, src)
-}
-func (m *User) XXX_Size() int {
- return xxx_messageInfo_User.Size(m)
-}
-func (m *User) XXX_DiscardUnknown() {
- xxx_messageInfo_User.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_User proto.InternalMessageInfo
-
-func (m *User) GetId() string {
- if m != nil {
- return m.Id
+func (x *User) GetId() string {
+ if x != nil {
+ return x.Id
}
return ""
}
-func (m *User) GetUsername() string {
- if m != nil {
- return m.Username
+func (x *User) GetUsername() string {
+ if x != nil {
+ return x.Username
}
return ""
}
-func (m *User) GetEmail() string {
- if m != nil {
- return m.Email
+func (x *User) GetEmail() string {
+ if x != nil {
+ return x.Email
}
return ""
}
-func (m *User) GetCreated() int64 {
- if m != nil {
- return m.Created
+func (x *User) GetCreated() int64 {
+ if x != nil {
+ return x.Created
}
return 0
}
-func (m *User) GetUpdated() int64 {
- if m != nil {
- return m.Updated
+func (x *User) GetUpdated() int64 {
+ if x != nil {
+ return x.Updated
}
return 0
}
type Session struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"`
- Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
- Created int64 `protobuf:"varint,4,opt,name=created,proto3" json:"created,omitempty"`
- Expires int64 `protobuf:"varint,5,opt,name=expires,proto3" json:"expires,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"`
+ Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
+ Created int64 `protobuf:"varint,4,opt,name=created,proto3" json:"created,omitempty"` // unix
+ Expires int64 `protobuf:"varint,5,opt,name=expires,proto3" json:"expires,omitempty"` // unix
}
-func (m *Session) Reset() { *m = Session{} }
-func (m *Session) String() string { return proto.CompactTextString(m) }
-func (*Session) ProtoMessage() {}
+func (x *Session) Reset() {
+ *x = Session{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Session) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Session) ProtoMessage() {}
+
+func (x *Session) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 Session.ProtoReflect.Descriptor instead.
func (*Session) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{1}
+ return file_proto_users_proto_rawDescGZIP(), []int{1}
}
-func (m *Session) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_Session.Unmarshal(m, b)
-}
-func (m *Session) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_Session.Marshal(b, m, deterministic)
-}
-func (m *Session) XXX_Merge(src proto.Message) {
- xxx_messageInfo_Session.Merge(m, src)
-}
-func (m *Session) XXX_Size() int {
- return xxx_messageInfo_Session.Size(m)
-}
-func (m *Session) XXX_DiscardUnknown() {
- xxx_messageInfo_Session.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Session proto.InternalMessageInfo
-
-func (m *Session) GetId() string {
- if m != nil {
- return m.Id
+func (x *Session) GetId() string {
+ if x != nil {
+ return x.Id
}
return ""
}
-func (m *Session) GetUsername() string {
- if m != nil {
- return m.Username
+func (x *Session) GetUsername() string {
+ if x != nil {
+ return x.Username
}
return ""
}
-func (m *Session) GetEmail() string {
- if m != nil {
- return m.Email
+func (x *Session) GetEmail() string {
+ if x != nil {
+ return x.Email
}
return ""
}
-func (m *Session) GetCreated() int64 {
- if m != nil {
- return m.Created
+func (x *Session) GetCreated() int64 {
+ if x != nil {
+ return x.Created
}
return 0
}
-func (m *Session) GetExpires() int64 {
- if m != nil {
- return m.Expires
+func (x *Session) GetExpires() int64 {
+ if x != nil {
+ return x.Expires
}
return 0
}
type CreateRequest struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"`
- Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
- Password string `protobuf:"bytes,4,opt,name=password,proto3" json:"password,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // uuid
+ Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` // alphanumeric user or org
+ Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
+ Password string `protobuf:"bytes,4,opt,name=password,proto3" json:"password,omitempty"`
}
-func (m *CreateRequest) Reset() { *m = CreateRequest{} }
-func (m *CreateRequest) String() string { return proto.CompactTextString(m) }
-func (*CreateRequest) ProtoMessage() {}
+func (x *CreateRequest) Reset() {
+ *x = CreateRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *CreateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateRequest) ProtoMessage() {}
+
+func (x *CreateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 CreateRequest.ProtoReflect.Descriptor instead.
func (*CreateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{2}
+ return file_proto_users_proto_rawDescGZIP(), []int{2}
}
-func (m *CreateRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_CreateRequest.Unmarshal(m, b)
-}
-func (m *CreateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_CreateRequest.Marshal(b, m, deterministic)
-}
-func (m *CreateRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_CreateRequest.Merge(m, src)
-}
-func (m *CreateRequest) XXX_Size() int {
- return xxx_messageInfo_CreateRequest.Size(m)
-}
-func (m *CreateRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_CreateRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_CreateRequest proto.InternalMessageInfo
-
-func (m *CreateRequest) GetId() string {
- if m != nil {
- return m.Id
+func (x *CreateRequest) GetId() string {
+ if x != nil {
+ return x.Id
}
return ""
}
-func (m *CreateRequest) GetUsername() string {
- if m != nil {
- return m.Username
+func (x *CreateRequest) GetUsername() string {
+ if x != nil {
+ return x.Username
}
return ""
}
-func (m *CreateRequest) GetEmail() string {
- if m != nil {
- return m.Email
+func (x *CreateRequest) GetEmail() string {
+ if x != nil {
+ return x.Email
}
return ""
}
-func (m *CreateRequest) GetPassword() string {
- if m != nil {
- return m.Password
+func (x *CreateRequest) GetPassword() string {
+ if x != nil {
+ return x.Password
}
return ""
}
type CreateResponse struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
}
-func (m *CreateResponse) Reset() { *m = CreateResponse{} }
-func (m *CreateResponse) String() string { return proto.CompactTextString(m) }
-func (*CreateResponse) ProtoMessage() {}
+func (x *CreateResponse) Reset() {
+ *x = CreateResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *CreateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateResponse) ProtoMessage() {}
+
+func (x *CreateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 CreateResponse.ProtoReflect.Descriptor instead.
func (*CreateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{3}
+ return file_proto_users_proto_rawDescGZIP(), []int{3}
}
-func (m *CreateResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_CreateResponse.Unmarshal(m, b)
-}
-func (m *CreateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_CreateResponse.Marshal(b, m, deterministic)
-}
-func (m *CreateResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_CreateResponse.Merge(m, src)
-}
-func (m *CreateResponse) XXX_Size() int {
- return xxx_messageInfo_CreateResponse.Size(m)
-}
-func (m *CreateResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_CreateResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_CreateResponse proto.InternalMessageInfo
-
type DeleteRequest struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
}
-func (m *DeleteRequest) Reset() { *m = DeleteRequest{} }
-func (m *DeleteRequest) String() string { return proto.CompactTextString(m) }
-func (*DeleteRequest) ProtoMessage() {}
+func (x *DeleteRequest) Reset() {
+ *x = DeleteRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DeleteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteRequest) ProtoMessage() {}
+
+func (x *DeleteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 DeleteRequest.ProtoReflect.Descriptor instead.
func (*DeleteRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{4}
+ return file_proto_users_proto_rawDescGZIP(), []int{4}
}
-func (m *DeleteRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_DeleteRequest.Unmarshal(m, b)
-}
-func (m *DeleteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_DeleteRequest.Marshal(b, m, deterministic)
-}
-func (m *DeleteRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_DeleteRequest.Merge(m, src)
-}
-func (m *DeleteRequest) XXX_Size() int {
- return xxx_messageInfo_DeleteRequest.Size(m)
-}
-func (m *DeleteRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_DeleteRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_DeleteRequest proto.InternalMessageInfo
-
-func (m *DeleteRequest) GetId() string {
- if m != nil {
- return m.Id
+func (x *DeleteRequest) GetId() string {
+ if x != nil {
+ return x.Id
}
return ""
}
type DeleteResponse struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
}
-func (m *DeleteResponse) Reset() { *m = DeleteResponse{} }
-func (m *DeleteResponse) String() string { return proto.CompactTextString(m) }
-func (*DeleteResponse) ProtoMessage() {}
+func (x *DeleteResponse) Reset() {
+ *x = DeleteResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DeleteResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteResponse) ProtoMessage() {}
+
+func (x *DeleteResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 DeleteResponse.ProtoReflect.Descriptor instead.
func (*DeleteResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{5}
+ return file_proto_users_proto_rawDescGZIP(), []int{5}
}
-func (m *DeleteResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_DeleteResponse.Unmarshal(m, b)
-}
-func (m *DeleteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_DeleteResponse.Marshal(b, m, deterministic)
-}
-func (m *DeleteResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_DeleteResponse.Merge(m, src)
-}
-func (m *DeleteResponse) XXX_Size() int {
- return xxx_messageInfo_DeleteResponse.Size(m)
-}
-func (m *DeleteResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_DeleteResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_DeleteResponse proto.InternalMessageInfo
-
type ReadRequest struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
}
-func (m *ReadRequest) Reset() { *m = ReadRequest{} }
-func (m *ReadRequest) String() string { return proto.CompactTextString(m) }
-func (*ReadRequest) ProtoMessage() {}
+func (x *ReadRequest) Reset() {
+ *x = ReadRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ReadRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReadRequest) ProtoMessage() {}
+
+func (x *ReadRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 ReadRequest.ProtoReflect.Descriptor instead.
func (*ReadRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{6}
+ return file_proto_users_proto_rawDescGZIP(), []int{6}
}
-func (m *ReadRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ReadRequest.Unmarshal(m, b)
-}
-func (m *ReadRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ReadRequest.Marshal(b, m, deterministic)
-}
-func (m *ReadRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ReadRequest.Merge(m, src)
-}
-func (m *ReadRequest) XXX_Size() int {
- return xxx_messageInfo_ReadRequest.Size(m)
-}
-func (m *ReadRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_ReadRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ReadRequest proto.InternalMessageInfo
-
-func (m *ReadRequest) GetId() string {
- if m != nil {
- return m.Id
+func (x *ReadRequest) GetId() string {
+ if x != nil {
+ return x.Id
}
return ""
}
type ReadResponse struct {
- User *User `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ User *User `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"`
}
-func (m *ReadResponse) Reset() { *m = ReadResponse{} }
-func (m *ReadResponse) String() string { return proto.CompactTextString(m) }
-func (*ReadResponse) ProtoMessage() {}
+func (x *ReadResponse) Reset() {
+ *x = ReadResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ReadResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReadResponse) ProtoMessage() {}
+
+func (x *ReadResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 ReadResponse.ProtoReflect.Descriptor instead.
func (*ReadResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{7}
+ return file_proto_users_proto_rawDescGZIP(), []int{7}
}
-func (m *ReadResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ReadResponse.Unmarshal(m, b)
-}
-func (m *ReadResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ReadResponse.Marshal(b, m, deterministic)
-}
-func (m *ReadResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ReadResponse.Merge(m, src)
-}
-func (m *ReadResponse) XXX_Size() int {
- return xxx_messageInfo_ReadResponse.Size(m)
-}
-func (m *ReadResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_ReadResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ReadResponse proto.InternalMessageInfo
-
-func (m *ReadResponse) GetUser() *User {
- if m != nil {
- return m.User
+func (x *ReadResponse) GetUser() *User {
+ if x != nil {
+ return x.User
}
return nil
}
type UpdateRequest struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
- Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"`
- Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // uuid
+ Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` // alphanumeric user or org
+ Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
}
-func (m *UpdateRequest) Reset() { *m = UpdateRequest{} }
-func (m *UpdateRequest) String() string { return proto.CompactTextString(m) }
-func (*UpdateRequest) ProtoMessage() {}
+func (x *UpdateRequest) Reset() {
+ *x = UpdateRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *UpdateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdateRequest) ProtoMessage() {}
+
+func (x *UpdateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 UpdateRequest.ProtoReflect.Descriptor instead.
func (*UpdateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{8}
+ return file_proto_users_proto_rawDescGZIP(), []int{8}
}
-func (m *UpdateRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_UpdateRequest.Unmarshal(m, b)
-}
-func (m *UpdateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_UpdateRequest.Marshal(b, m, deterministic)
-}
-func (m *UpdateRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_UpdateRequest.Merge(m, src)
-}
-func (m *UpdateRequest) XXX_Size() int {
- return xxx_messageInfo_UpdateRequest.Size(m)
-}
-func (m *UpdateRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_UpdateRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_UpdateRequest proto.InternalMessageInfo
-
-func (m *UpdateRequest) GetId() string {
- if m != nil {
- return m.Id
+func (x *UpdateRequest) GetId() string {
+ if x != nil {
+ return x.Id
}
return ""
}
-func (m *UpdateRequest) GetUsername() string {
- if m != nil {
- return m.Username
+func (x *UpdateRequest) GetUsername() string {
+ if x != nil {
+ return x.Username
}
return ""
}
-func (m *UpdateRequest) GetEmail() string {
- if m != nil {
- return m.Email
+func (x *UpdateRequest) GetEmail() string {
+ if x != nil {
+ return x.Email
}
return ""
}
type UpdateResponse struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
}
-func (m *UpdateResponse) Reset() { *m = UpdateResponse{} }
-func (m *UpdateResponse) String() string { return proto.CompactTextString(m) }
-func (*UpdateResponse) ProtoMessage() {}
+func (x *UpdateResponse) Reset() {
+ *x = UpdateResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *UpdateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdateResponse) ProtoMessage() {}
+
+func (x *UpdateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 UpdateResponse.ProtoReflect.Descriptor instead.
func (*UpdateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{9}
+ return file_proto_users_proto_rawDescGZIP(), []int{9}
}
-func (m *UpdateResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_UpdateResponse.Unmarshal(m, b)
-}
-func (m *UpdateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_UpdateResponse.Marshal(b, m, deterministic)
-}
-func (m *UpdateResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_UpdateResponse.Merge(m, src)
-}
-func (m *UpdateResponse) XXX_Size() int {
- return xxx_messageInfo_UpdateResponse.Size(m)
-}
-func (m *UpdateResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_UpdateResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_UpdateResponse proto.InternalMessageInfo
-
type UpdatePasswordRequest struct {
- UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"`
- OldPassword string `protobuf:"bytes,2,opt,name=oldPassword,proto3" json:"oldPassword,omitempty"`
- NewPassword string `protobuf:"bytes,3,opt,name=newPassword,proto3" json:"newPassword,omitempty"`
- ConfirmPassword string `protobuf:"bytes,4,opt,name=confirm_password,json=confirmPassword,proto3" json:"confirm_password,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"`
+ OldPassword string `protobuf:"bytes,2,opt,name=oldPassword,proto3" json:"oldPassword,omitempty"`
+ NewPassword string `protobuf:"bytes,3,opt,name=newPassword,proto3" json:"newPassword,omitempty"`
+ ConfirmPassword string `protobuf:"bytes,4,opt,name=confirm_password,json=confirmPassword,proto3" json:"confirm_password,omitempty"`
}
-func (m *UpdatePasswordRequest) Reset() { *m = UpdatePasswordRequest{} }
-func (m *UpdatePasswordRequest) String() string { return proto.CompactTextString(m) }
-func (*UpdatePasswordRequest) ProtoMessage() {}
+func (x *UpdatePasswordRequest) Reset() {
+ *x = UpdatePasswordRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *UpdatePasswordRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdatePasswordRequest) ProtoMessage() {}
+
+func (x *UpdatePasswordRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 UpdatePasswordRequest.ProtoReflect.Descriptor instead.
func (*UpdatePasswordRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{10}
+ return file_proto_users_proto_rawDescGZIP(), []int{10}
}
-func (m *UpdatePasswordRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_UpdatePasswordRequest.Unmarshal(m, b)
-}
-func (m *UpdatePasswordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_UpdatePasswordRequest.Marshal(b, m, deterministic)
-}
-func (m *UpdatePasswordRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_UpdatePasswordRequest.Merge(m, src)
-}
-func (m *UpdatePasswordRequest) XXX_Size() int {
- return xxx_messageInfo_UpdatePasswordRequest.Size(m)
-}
-func (m *UpdatePasswordRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_UpdatePasswordRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_UpdatePasswordRequest proto.InternalMessageInfo
-
-func (m *UpdatePasswordRequest) GetUserId() string {
- if m != nil {
- return m.UserId
+func (x *UpdatePasswordRequest) GetUserId() string {
+ if x != nil {
+ return x.UserId
}
return ""
}
-func (m *UpdatePasswordRequest) GetOldPassword() string {
- if m != nil {
- return m.OldPassword
+func (x *UpdatePasswordRequest) GetOldPassword() string {
+ if x != nil {
+ return x.OldPassword
}
return ""
}
-func (m *UpdatePasswordRequest) GetNewPassword() string {
- if m != nil {
- return m.NewPassword
+func (x *UpdatePasswordRequest) GetNewPassword() string {
+ if x != nil {
+ return x.NewPassword
}
return ""
}
-func (m *UpdatePasswordRequest) GetConfirmPassword() string {
- if m != nil {
- return m.ConfirmPassword
+func (x *UpdatePasswordRequest) GetConfirmPassword() string {
+ if x != nil {
+ return x.ConfirmPassword
}
return ""
}
type UpdatePasswordResponse struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
}
-func (m *UpdatePasswordResponse) Reset() { *m = UpdatePasswordResponse{} }
-func (m *UpdatePasswordResponse) String() string { return proto.CompactTextString(m) }
-func (*UpdatePasswordResponse) ProtoMessage() {}
+func (x *UpdatePasswordResponse) Reset() {
+ *x = UpdatePasswordResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *UpdatePasswordResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdatePasswordResponse) ProtoMessage() {}
+
+func (x *UpdatePasswordResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 UpdatePasswordResponse.ProtoReflect.Descriptor instead.
func (*UpdatePasswordResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{11}
+ return file_proto_users_proto_rawDescGZIP(), []int{11}
}
-func (m *UpdatePasswordResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_UpdatePasswordResponse.Unmarshal(m, b)
-}
-func (m *UpdatePasswordResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_UpdatePasswordResponse.Marshal(b, m, deterministic)
-}
-func (m *UpdatePasswordResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_UpdatePasswordResponse.Merge(m, src)
-}
-func (m *UpdatePasswordResponse) XXX_Size() int {
- return xxx_messageInfo_UpdatePasswordResponse.Size(m)
-}
-func (m *UpdatePasswordResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_UpdatePasswordResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_UpdatePasswordResponse proto.InternalMessageInfo
-
type SearchRequest struct {
- Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
- Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"`
- Limit int64 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"`
- Offset int64 `protobuf:"varint,4,opt,name=offset,proto3" json:"offset,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
+ Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"`
+ Limit int64 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"`
+ Offset int64 `protobuf:"varint,4,opt,name=offset,proto3" json:"offset,omitempty"`
}
-func (m *SearchRequest) Reset() { *m = SearchRequest{} }
-func (m *SearchRequest) String() string { return proto.CompactTextString(m) }
-func (*SearchRequest) ProtoMessage() {}
+func (x *SearchRequest) Reset() {
+ *x = SearchRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SearchRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SearchRequest) ProtoMessage() {}
+
+func (x *SearchRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 SearchRequest.ProtoReflect.Descriptor instead.
func (*SearchRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{12}
+ return file_proto_users_proto_rawDescGZIP(), []int{12}
}
-func (m *SearchRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_SearchRequest.Unmarshal(m, b)
-}
-func (m *SearchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_SearchRequest.Marshal(b, m, deterministic)
-}
-func (m *SearchRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_SearchRequest.Merge(m, src)
-}
-func (m *SearchRequest) XXX_Size() int {
- return xxx_messageInfo_SearchRequest.Size(m)
-}
-func (m *SearchRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_SearchRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SearchRequest proto.InternalMessageInfo
-
-func (m *SearchRequest) GetUsername() string {
- if m != nil {
- return m.Username
+func (x *SearchRequest) GetUsername() string {
+ if x != nil {
+ return x.Username
}
return ""
}
-func (m *SearchRequest) GetEmail() string {
- if m != nil {
- return m.Email
+func (x *SearchRequest) GetEmail() string {
+ if x != nil {
+ return x.Email
}
return ""
}
-func (m *SearchRequest) GetLimit() int64 {
- if m != nil {
- return m.Limit
+func (x *SearchRequest) GetLimit() int64 {
+ if x != nil {
+ return x.Limit
}
return 0
}
-func (m *SearchRequest) GetOffset() int64 {
- if m != nil {
- return m.Offset
+func (x *SearchRequest) GetOffset() int64 {
+ if x != nil {
+ return x.Offset
}
return 0
}
type SearchResponse struct {
- Users []*User `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Users []*User `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"`
}
-func (m *SearchResponse) Reset() { *m = SearchResponse{} }
-func (m *SearchResponse) String() string { return proto.CompactTextString(m) }
-func (*SearchResponse) ProtoMessage() {}
+func (x *SearchResponse) Reset() {
+ *x = SearchResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SearchResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SearchResponse) ProtoMessage() {}
+
+func (x *SearchResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 SearchResponse.ProtoReflect.Descriptor instead.
func (*SearchResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{13}
+ return file_proto_users_proto_rawDescGZIP(), []int{13}
}
-func (m *SearchResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_SearchResponse.Unmarshal(m, b)
-}
-func (m *SearchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_SearchResponse.Marshal(b, m, deterministic)
-}
-func (m *SearchResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_SearchResponse.Merge(m, src)
-}
-func (m *SearchResponse) XXX_Size() int {
- return xxx_messageInfo_SearchResponse.Size(m)
-}
-func (m *SearchResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_SearchResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SearchResponse proto.InternalMessageInfo
-
-func (m *SearchResponse) GetUsers() []*User {
- if m != nil {
- return m.Users
+func (x *SearchResponse) GetUsers() []*User {
+ if x != nil {
+ return x.Users
}
return nil
}
type ReadSessionRequest struct {
- SessionId string `protobuf:"bytes,1,opt,name=sessionId,proto3" json:"sessionId,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ SessionId string `protobuf:"bytes,1,opt,name=sessionId,proto3" json:"sessionId,omitempty"`
}
-func (m *ReadSessionRequest) Reset() { *m = ReadSessionRequest{} }
-func (m *ReadSessionRequest) String() string { return proto.CompactTextString(m) }
-func (*ReadSessionRequest) ProtoMessage() {}
+func (x *ReadSessionRequest) Reset() {
+ *x = ReadSessionRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ReadSessionRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReadSessionRequest) ProtoMessage() {}
+
+func (x *ReadSessionRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 ReadSessionRequest.ProtoReflect.Descriptor instead.
func (*ReadSessionRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{14}
+ return file_proto_users_proto_rawDescGZIP(), []int{14}
}
-func (m *ReadSessionRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ReadSessionRequest.Unmarshal(m, b)
-}
-func (m *ReadSessionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ReadSessionRequest.Marshal(b, m, deterministic)
-}
-func (m *ReadSessionRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ReadSessionRequest.Merge(m, src)
-}
-func (m *ReadSessionRequest) XXX_Size() int {
- return xxx_messageInfo_ReadSessionRequest.Size(m)
-}
-func (m *ReadSessionRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_ReadSessionRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ReadSessionRequest proto.InternalMessageInfo
-
-func (m *ReadSessionRequest) GetSessionId() string {
- if m != nil {
- return m.SessionId
+func (x *ReadSessionRequest) GetSessionId() string {
+ if x != nil {
+ return x.SessionId
}
return ""
}
type ReadSessionResponse struct {
- Session *Session `protobuf:"bytes,1,opt,name=session,proto3" json:"session,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Session *Session `protobuf:"bytes,1,opt,name=session,proto3" json:"session,omitempty"`
}
-func (m *ReadSessionResponse) Reset() { *m = ReadSessionResponse{} }
-func (m *ReadSessionResponse) String() string { return proto.CompactTextString(m) }
-func (*ReadSessionResponse) ProtoMessage() {}
+func (x *ReadSessionResponse) Reset() {
+ *x = ReadSessionResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ReadSessionResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReadSessionResponse) ProtoMessage() {}
+
+func (x *ReadSessionResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 ReadSessionResponse.ProtoReflect.Descriptor instead.
func (*ReadSessionResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{15}
+ return file_proto_users_proto_rawDescGZIP(), []int{15}
}
-func (m *ReadSessionResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_ReadSessionResponse.Unmarshal(m, b)
-}
-func (m *ReadSessionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_ReadSessionResponse.Marshal(b, m, deterministic)
-}
-func (m *ReadSessionResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_ReadSessionResponse.Merge(m, src)
-}
-func (m *ReadSessionResponse) XXX_Size() int {
- return xxx_messageInfo_ReadSessionResponse.Size(m)
-}
-func (m *ReadSessionResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_ReadSessionResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ReadSessionResponse proto.InternalMessageInfo
-
-func (m *ReadSessionResponse) GetSession() *Session {
- if m != nil {
- return m.Session
+func (x *ReadSessionResponse) GetSession() *Session {
+ if x != nil {
+ return x.Session
}
return nil
}
type LoginRequest struct {
- Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
- Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"`
- Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"`
+ Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"`
+ Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"`
}
-func (m *LoginRequest) Reset() { *m = LoginRequest{} }
-func (m *LoginRequest) String() string { return proto.CompactTextString(m) }
-func (*LoginRequest) ProtoMessage() {}
+func (x *LoginRequest) Reset() {
+ *x = LoginRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *LoginRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LoginRequest) ProtoMessage() {}
+
+func (x *LoginRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 LoginRequest.ProtoReflect.Descriptor instead.
func (*LoginRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{16}
+ return file_proto_users_proto_rawDescGZIP(), []int{16}
}
-func (m *LoginRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_LoginRequest.Unmarshal(m, b)
-}
-func (m *LoginRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_LoginRequest.Marshal(b, m, deterministic)
-}
-func (m *LoginRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LoginRequest.Merge(m, src)
-}
-func (m *LoginRequest) XXX_Size() int {
- return xxx_messageInfo_LoginRequest.Size(m)
-}
-func (m *LoginRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_LoginRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LoginRequest proto.InternalMessageInfo
-
-func (m *LoginRequest) GetUsername() string {
- if m != nil {
- return m.Username
+func (x *LoginRequest) GetUsername() string {
+ if x != nil {
+ return x.Username
}
return ""
}
-func (m *LoginRequest) GetEmail() string {
- if m != nil {
- return m.Email
+func (x *LoginRequest) GetEmail() string {
+ if x != nil {
+ return x.Email
}
return ""
}
-func (m *LoginRequest) GetPassword() string {
- if m != nil {
- return m.Password
+func (x *LoginRequest) GetPassword() string {
+ if x != nil {
+ return x.Password
}
return ""
}
type LoginResponse struct {
- Session *Session `protobuf:"bytes,1,opt,name=session,proto3" json:"session,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Session *Session `protobuf:"bytes,1,opt,name=session,proto3" json:"session,omitempty"`
}
-func (m *LoginResponse) Reset() { *m = LoginResponse{} }
-func (m *LoginResponse) String() string { return proto.CompactTextString(m) }
-func (*LoginResponse) ProtoMessage() {}
+func (x *LoginResponse) Reset() {
+ *x = LoginResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *LoginResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LoginResponse) ProtoMessage() {}
+
+func (x *LoginResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 LoginResponse.ProtoReflect.Descriptor instead.
func (*LoginResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{17}
+ return file_proto_users_proto_rawDescGZIP(), []int{17}
}
-func (m *LoginResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_LoginResponse.Unmarshal(m, b)
-}
-func (m *LoginResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_LoginResponse.Marshal(b, m, deterministic)
-}
-func (m *LoginResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LoginResponse.Merge(m, src)
-}
-func (m *LoginResponse) XXX_Size() int {
- return xxx_messageInfo_LoginResponse.Size(m)
-}
-func (m *LoginResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_LoginResponse.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LoginResponse proto.InternalMessageInfo
-
-func (m *LoginResponse) GetSession() *Session {
- if m != nil {
- return m.Session
+func (x *LoginResponse) GetSession() *Session {
+ if x != nil {
+ return x.Session
}
return nil
}
type LogoutRequest struct {
- SessionId string `protobuf:"bytes,1,opt,name=sessionId,proto3" json:"sessionId,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ SessionId string `protobuf:"bytes,1,opt,name=sessionId,proto3" json:"sessionId,omitempty"`
}
-func (m *LogoutRequest) Reset() { *m = LogoutRequest{} }
-func (m *LogoutRequest) String() string { return proto.CompactTextString(m) }
-func (*LogoutRequest) ProtoMessage() {}
+func (x *LogoutRequest) Reset() {
+ *x = LogoutRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *LogoutRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LogoutRequest) ProtoMessage() {}
+
+func (x *LogoutRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 LogoutRequest.ProtoReflect.Descriptor instead.
func (*LogoutRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{18}
+ return file_proto_users_proto_rawDescGZIP(), []int{18}
}
-func (m *LogoutRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_LogoutRequest.Unmarshal(m, b)
-}
-func (m *LogoutRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_LogoutRequest.Marshal(b, m, deterministic)
-}
-func (m *LogoutRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LogoutRequest.Merge(m, src)
-}
-func (m *LogoutRequest) XXX_Size() int {
- return xxx_messageInfo_LogoutRequest.Size(m)
-}
-func (m *LogoutRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_LogoutRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LogoutRequest proto.InternalMessageInfo
-
-func (m *LogoutRequest) GetSessionId() string {
- if m != nil {
- return m.SessionId
+func (x *LogoutRequest) GetSessionId() string {
+ if x != nil {
+ return x.SessionId
}
return ""
}
type LogoutResponse struct {
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
}
-func (m *LogoutResponse) Reset() { *m = LogoutResponse{} }
-func (m *LogoutResponse) String() string { return proto.CompactTextString(m) }
-func (*LogoutResponse) ProtoMessage() {}
+func (x *LogoutResponse) Reset() {
+ *x = LogoutResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_users_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *LogoutResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LogoutResponse) ProtoMessage() {}
+
+func (x *LogoutResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_users_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 LogoutResponse.ProtoReflect.Descriptor instead.
func (*LogoutResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_b1c161a4c7514913, []int{19}
+ return file_proto_users_proto_rawDescGZIP(), []int{19}
}
-func (m *LogoutResponse) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_LogoutResponse.Unmarshal(m, b)
-}
-func (m *LogoutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_LogoutResponse.Marshal(b, m, deterministic)
-}
-func (m *LogoutResponse) XXX_Merge(src proto.Message) {
- xxx_messageInfo_LogoutResponse.Merge(m, src)
-}
-func (m *LogoutResponse) XXX_Size() int {
- return xxx_messageInfo_LogoutResponse.Size(m)
-}
-func (m *LogoutResponse) XXX_DiscardUnknown() {
- xxx_messageInfo_LogoutResponse.DiscardUnknown(m)
+var File_proto_users_proto protoreflect.FileDescriptor
+
+var file_proto_users_proto_rawDesc = []byte{
+ 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0x7c, 0x0a, 0x04, 0x55, 0x73,
+ 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
+ 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14,
+ 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65,
+ 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x18,
+ 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52,
+ 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x22, 0x7f, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73,
+ 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12,
+ 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+ 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12,
+ 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x22, 0x6d, 0x0a, 0x0d, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73,
+ 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73,
+ 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08,
+ 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+ 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x10, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x0a, 0x0d, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x10, 0x0a, 0x0e, 0x44,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x0a,
+ 0x0b, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02,
+ 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2f, 0x0a, 0x0c,
+ 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x04,
+ 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x75, 0x73, 0x65,
+ 0x72, 0x73, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x51, 0x0a,
+ 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e,
+ 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a,
+ 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d,
+ 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c,
+ 0x22, 0x10, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73,
+ 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06,
+ 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73,
+ 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x6c, 0x64, 0x50, 0x61, 0x73, 0x73, 0x77,
+ 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x6c, 0x64, 0x50, 0x61,
+ 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x73,
+ 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x77,
+ 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66,
+ 0x69, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x50, 0x61, 0x73, 0x73, 0x77,
+ 0x6f, 0x72, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73,
+ 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6f, 0x0a,
+ 0x0d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,
+ 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d,
+ 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c,
+ 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
+ 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74,
+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x33,
+ 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x21, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x0b, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73,
+ 0x65, 0x72, 0x73, 0x22, 0x32, 0x0a, 0x12, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x73,
+ 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65,
+ 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x3f, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x64, 0x53,
+ 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28,
+ 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x0e, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52,
+ 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x5c, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69,
+ 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72,
+ 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72,
+ 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61,
+ 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61,
+ 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x39, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69,
+ 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73,
+ 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
+ 0x6e, 0x22, 0x2d, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64,
+ 0x22, 0x10, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x32, 0xa6, 0x04, 0x0a, 0x05, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x06,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x43,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x75,
+ 0x73, 0x65, 0x72, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x12, 0x2e,
+ 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x13, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x12, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73,
+ 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x37, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x14, 0x2e, 0x75, 0x73,
+ 0x65, 0x72, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x15, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x06, 0x53, 0x65,
+ 0x61, 0x72, 0x63, 0x68, 0x12, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x53, 0x65, 0x61,
+ 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x75, 0x73, 0x65,
+ 0x72, 0x73, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73,
+ 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1c, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x34, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x13, 0x2e,
+ 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x06, 0x4c, 0x6f,
+ 0x67, 0x6f, 0x75, 0x74, 0x12, 0x14, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x4c, 0x6f, 0x67,
+ 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x75, 0x73, 0x65,
+ 0x72, 0x73, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0b, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69,
+ 0x6f, 0x6e, 0x12, 0x19, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x53,
+ 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e,
+ 0x75, 0x73, 0x65, 0x72, 0x73, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f,
+ 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0d, 0x5a, 0x0b, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x75, 0x73, 0x65, 0x72, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x33,
}
-var xxx_messageInfo_LogoutResponse proto.InternalMessageInfo
+var (
+ file_proto_users_proto_rawDescOnce sync.Once
+ file_proto_users_proto_rawDescData = file_proto_users_proto_rawDesc
+)
-func init() {
- proto.RegisterType((*User)(nil), "User")
- proto.RegisterType((*Session)(nil), "Session")
- proto.RegisterType((*CreateRequest)(nil), "CreateRequest")
- proto.RegisterType((*CreateResponse)(nil), "CreateResponse")
- proto.RegisterType((*DeleteRequest)(nil), "DeleteRequest")
- proto.RegisterType((*DeleteResponse)(nil), "DeleteResponse")
- proto.RegisterType((*ReadRequest)(nil), "ReadRequest")
- proto.RegisterType((*ReadResponse)(nil), "ReadResponse")
- proto.RegisterType((*UpdateRequest)(nil), "UpdateRequest")
- proto.RegisterType((*UpdateResponse)(nil), "UpdateResponse")
- proto.RegisterType((*UpdatePasswordRequest)(nil), "UpdatePasswordRequest")
- proto.RegisterType((*UpdatePasswordResponse)(nil), "UpdatePasswordResponse")
- proto.RegisterType((*SearchRequest)(nil), "SearchRequest")
- proto.RegisterType((*SearchResponse)(nil), "SearchResponse")
- proto.RegisterType((*ReadSessionRequest)(nil), "ReadSessionRequest")
- proto.RegisterType((*ReadSessionResponse)(nil), "ReadSessionResponse")
- proto.RegisterType((*LoginRequest)(nil), "LoginRequest")
- proto.RegisterType((*LoginResponse)(nil), "LoginResponse")
- proto.RegisterType((*LogoutRequest)(nil), "LogoutRequest")
- proto.RegisterType((*LogoutResponse)(nil), "LogoutResponse")
+func file_proto_users_proto_rawDescGZIP() []byte {
+ file_proto_users_proto_rawDescOnce.Do(func() {
+ file_proto_users_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_users_proto_rawDescData)
+ })
+ return file_proto_users_proto_rawDescData
}
-func init() {
- proto.RegisterFile("proto/users.proto", fileDescriptor_b1c161a4c7514913)
+var file_proto_users_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
+var file_proto_users_proto_goTypes = []interface{}{
+ (*User)(nil), // 0: users.User
+ (*Session)(nil), // 1: users.Session
+ (*CreateRequest)(nil), // 2: users.CreateRequest
+ (*CreateResponse)(nil), // 3: users.CreateResponse
+ (*DeleteRequest)(nil), // 4: users.DeleteRequest
+ (*DeleteResponse)(nil), // 5: users.DeleteResponse
+ (*ReadRequest)(nil), // 6: users.ReadRequest
+ (*ReadResponse)(nil), // 7: users.ReadResponse
+ (*UpdateRequest)(nil), // 8: users.UpdateRequest
+ (*UpdateResponse)(nil), // 9: users.UpdateResponse
+ (*UpdatePasswordRequest)(nil), // 10: users.UpdatePasswordRequest
+ (*UpdatePasswordResponse)(nil), // 11: users.UpdatePasswordResponse
+ (*SearchRequest)(nil), // 12: users.SearchRequest
+ (*SearchResponse)(nil), // 13: users.SearchResponse
+ (*ReadSessionRequest)(nil), // 14: users.ReadSessionRequest
+ (*ReadSessionResponse)(nil), // 15: users.ReadSessionResponse
+ (*LoginRequest)(nil), // 16: users.LoginRequest
+ (*LoginResponse)(nil), // 17: users.LoginResponse
+ (*LogoutRequest)(nil), // 18: users.LogoutRequest
+ (*LogoutResponse)(nil), // 19: users.LogoutResponse
+}
+var file_proto_users_proto_depIdxs = []int32{
+ 0, // 0: users.ReadResponse.user:type_name -> users.User
+ 0, // 1: users.SearchResponse.users:type_name -> users.User
+ 1, // 2: users.ReadSessionResponse.session:type_name -> users.Session
+ 1, // 3: users.LoginResponse.session:type_name -> users.Session
+ 2, // 4: users.Users.Create:input_type -> users.CreateRequest
+ 6, // 5: users.Users.Read:input_type -> users.ReadRequest
+ 8, // 6: users.Users.Update:input_type -> users.UpdateRequest
+ 4, // 7: users.Users.Delete:input_type -> users.DeleteRequest
+ 12, // 8: users.Users.Search:input_type -> users.SearchRequest
+ 10, // 9: users.Users.UpdatePassword:input_type -> users.UpdatePasswordRequest
+ 16, // 10: users.Users.Login:input_type -> users.LoginRequest
+ 18, // 11: users.Users.Logout:input_type -> users.LogoutRequest
+ 14, // 12: users.Users.ReadSession:input_type -> users.ReadSessionRequest
+ 3, // 13: users.Users.Create:output_type -> users.CreateResponse
+ 7, // 14: users.Users.Read:output_type -> users.ReadResponse
+ 9, // 15: users.Users.Update:output_type -> users.UpdateResponse
+ 5, // 16: users.Users.Delete:output_type -> users.DeleteResponse
+ 13, // 17: users.Users.Search:output_type -> users.SearchResponse
+ 11, // 18: users.Users.UpdatePassword:output_type -> users.UpdatePasswordResponse
+ 17, // 19: users.Users.Login:output_type -> users.LoginResponse
+ 19, // 20: users.Users.Logout:output_type -> users.LogoutResponse
+ 15, // 21: users.Users.ReadSession:output_type -> users.ReadSessionResponse
+ 13, // [13:22] is the sub-list for method output_type
+ 4, // [4:13] is the sub-list for method input_type
+ 4, // [4:4] is the sub-list for extension type_name
+ 4, // [4:4] is the sub-list for extension extendee
+ 0, // [0:4] is the sub-list for field type_name
}
-var fileDescriptor_b1c161a4c7514913 = []byte{
- // 600 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x55, 0xcf, 0x6e, 0xd3, 0x4e,
- 0x10, 0x4e, 0xe2, 0x38, 0x69, 0x27, 0x71, 0xda, 0xdf, 0xb6, 0xbf, 0x60, 0x0c, 0x88, 0x6a, 0x25,
- 0xa4, 0x56, 0xa8, 0x8b, 0x94, 0x9e, 0xe0, 0x5a, 0x2e, 0x48, 0x1c, 0xc0, 0x55, 0x6f, 0x48, 0xc8,
- 0x24, 0x1b, 0xb0, 0x14, 0x7b, 0x8d, 0xd7, 0x51, 0x39, 0x20, 0xf1, 0x26, 0x3c, 0x08, 0x4f, 0xc7,
- 0xec, 0xbf, 0xc4, 0x36, 0x8d, 0x04, 0xa8, 0xdc, 0x3c, 0x33, 0xdf, 0xec, 0x7c, 0x3b, 0x33, 0xdf,
- 0x1a, 0xfe, 0x2b, 0x4a, 0x51, 0x89, 0x67, 0x6b, 0xc9, 0x4b, 0xc9, 0xf4, 0x37, 0xfd, 0x0a, 0xfd,
- 0x6b, 0x34, 0xc9, 0x04, 0x7a, 0xe9, 0x22, 0xec, 0x9e, 0x74, 0x4f, 0xf7, 0x63, 0xfc, 0x22, 0x11,
- 0xec, 0x29, 0x58, 0x9e, 0x64, 0x3c, 0xec, 0x69, 0xef, 0xc6, 0x26, 0xc7, 0xe0, 0xf3, 0x2c, 0x49,
- 0x57, 0xa1, 0xa7, 0x03, 0xc6, 0x20, 0x21, 0x0c, 0xe7, 0x25, 0x4f, 0x2a, 0xbe, 0x08, 0xfb, 0xe8,
- 0xf7, 0x62, 0x67, 0xaa, 0xc8, 0xba, 0x58, 0xe8, 0x88, 0x6f, 0x22, 0xd6, 0xa4, 0xdf, 0x60, 0x78,
- 0xc5, 0xa5, 0x4c, 0x45, 0xfe, 0xaf, 0x09, 0xf0, 0x2f, 0x45, 0x5a, 0x72, 0xe9, 0x08, 0x58, 0x93,
- 0x66, 0x10, 0x5c, 0x6a, 0x50, 0xcc, 0x3f, 0xaf, 0xb9, 0xac, 0xee, 0x80, 0x06, 0x66, 0x14, 0x89,
- 0x94, 0x37, 0xa2, 0x34, 0x3c, 0x30, 0xc3, 0xd9, 0xf4, 0x10, 0x26, 0xae, 0x9c, 0x2c, 0x44, 0x2e,
- 0x39, 0x7d, 0x0c, 0xc1, 0x4b, 0xbe, 0xe2, 0x3b, 0x09, 0xa8, 0x14, 0x07, 0xb0, 0x29, 0x8f, 0x60,
- 0x14, 0xf3, 0x64, 0xb1, 0x2b, 0xe1, 0x0c, 0xc6, 0x26, 0x6c, 0xe0, 0xe4, 0x3e, 0xf4, 0x15, 0x63,
- 0x8d, 0x18, 0xcd, 0x7c, 0xa6, 0xc6, 0x1d, 0x6b, 0x17, 0x7d, 0x0b, 0xc1, 0xb5, 0x9e, 0xc4, 0x9d,
- 0xdd, 0x5e, 0xd1, 0x75, 0x47, 0x5a, 0xba, 0xdf, 0xbb, 0xf0, 0xbf, 0x71, 0xbd, 0xb1, 0x6d, 0x70,
- 0xd5, 0xa6, 0x30, 0x50, 0xa7, 0xbd, 0x72, 0x15, 0xad, 0x45, 0x4e, 0x60, 0x24, 0x56, 0x0b, 0x87,
- 0xb6, 0x85, 0xeb, 0x2e, 0x85, 0xc8, 0xf9, 0xcd, 0x06, 0x61, 0x18, 0xd4, 0x5d, 0xe4, 0x0c, 0x0e,
- 0xe7, 0x22, 0x5f, 0xa6, 0x65, 0xf6, 0xbe, 0x35, 0x8d, 0x03, 0xeb, 0x77, 0x50, 0x1a, 0xc2, 0xb4,
- 0xcd, 0xcf, 0x52, 0x17, 0x10, 0x5c, 0xf1, 0xa4, 0x9c, 0x7f, 0x72, 0x8c, 0xeb, 0xfd, 0xe8, 0xee,
- 0xea, 0x47, 0xaf, 0xbe, 0x0d, 0xe8, 0x5d, 0xa5, 0x59, 0x5a, 0x69, 0x8e, 0x5e, 0x6c, 0x0c, 0x75,
- 0x73, 0xb1, 0x5c, 0x4a, 0x5e, 0xd9, 0x4d, 0xb5, 0x16, 0x3d, 0x87, 0x89, 0x2b, 0x68, 0xa7, 0xf7,
- 0x00, 0x7c, 0x2d, 0x57, 0x2c, 0xe7, 0x6d, 0xc7, 0x67, 0x7c, 0x74, 0x06, 0x44, 0x8d, 0xda, 0x4a,
- 0xc8, 0x91, 0x7c, 0x08, 0xfb, 0xd2, 0x78, 0x36, 0x9d, 0xdd, 0x3a, 0xe8, 0x73, 0x38, 0x6a, 0xe4,
- 0xd8, 0x3a, 0x14, 0x86, 0x16, 0x63, 0x17, 0x65, 0x8f, 0x39, 0x88, 0x0b, 0xd0, 0x77, 0x30, 0x7e,
- 0x2d, 0x3e, 0xa6, 0xf9, 0xdf, 0x77, 0xa3, 0xae, 0x0d, 0xaf, 0xa5, 0x8d, 0x0b, 0x08, 0xec, 0xe9,
- 0x7f, 0x40, 0xe9, 0x5c, 0x27, 0x89, 0x75, 0xf5, 0x7b, 0x97, 0xc7, 0xed, 0x74, 0x70, 0x53, 0x64,
- 0xf6, 0xc3, 0x03, 0x5f, 0xb5, 0x54, 0x92, 0xa7, 0x30, 0x30, 0xda, 0x24, 0x13, 0xd6, 0x78, 0x13,
- 0xa2, 0x03, 0xd6, 0x12, 0x6d, 0x87, 0x3c, 0x81, 0xbe, 0xea, 0x22, 0x19, 0xb3, 0x9a, 0x14, 0xa3,
- 0x80, 0xd5, 0x95, 0x87, 0x30, 0x3c, 0xd3, 0xac, 0x16, 0x9e, 0xd9, 0x50, 0x1a, 0x9e, 0xd9, 0x92,
- 0x89, 0x06, 0x1b, 0xa5, 0x23, 0xb8, 0xf1, 0x26, 0x20, 0xb8, 0xf5, 0x04, 0x68, 0xb0, 0xd9, 0x14,
- 0x04, 0x37, 0x76, 0x14, 0xc1, 0xcd, 0x15, 0x42, 0xf0, 0xa5, 0x13, 0xe5, 0x46, 0x1e, 0x53, 0x76,
- 0xab, 0x24, 0xa3, 0x7b, 0x6c, 0x87, 0x14, 0x3a, 0xe4, 0x14, 0x7c, 0x3d, 0x1f, 0x12, 0xb0, 0xfa,
- 0x16, 0x44, 0x13, 0xd6, 0x18, 0x9b, 0xe1, 0x66, 0xba, 0x4c, 0x74, 0x6c, 0x3b, 0x1d, 0xe4, 0xd6,
- 0x6c, 0x3f, 0x82, 0x5f, 0x98, 0xd7, 0xcc, 0xfd, 0x06, 0x8e, 0xd8, 0xaf, 0x1b, 0x1d, 0x1d, 0xb3,
- 0x5b, 0x56, 0x96, 0x76, 0x3e, 0x0c, 0xf4, 0x3f, 0xec, 0xe2, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0xc7, 0x99, 0xc1, 0x0c, 0xd8, 0x06, 0x00, 0x00,
+func init() { file_proto_users_proto_init() }
+func file_proto_users_proto_init() {
+ if File_proto_users_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_proto_users_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*User); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Session); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*CreateRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*CreateResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DeleteRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DeleteResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ReadRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ReadResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*UpdateRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*UpdateResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*UpdatePasswordRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*UpdatePasswordResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SearchRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SearchResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ReadSessionRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ReadSessionResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*LoginRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*LoginResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*LogoutRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_users_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*LogoutResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_proto_users_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 20,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_proto_users_proto_goTypes,
+ DependencyIndexes: file_proto_users_proto_depIdxs,
+ MessageInfos: file_proto_users_proto_msgTypes,
+ }.Build()
+ File_proto_users_proto = out.File
+ file_proto_users_proto_rawDesc = nil
+ file_proto_users_proto_goTypes = nil
+ file_proto_users_proto_depIdxs = nil
}
diff --git a/users/proto/users.proto b/users/proto/users.proto
index 8d9d0ce..fa54fc0 100644
--- a/users/proto/users.proto
+++ b/users/proto/users.proto
@@ -1,5 +1,8 @@
syntax = "proto3";
+package users;
+option go_package = "proto;users";
+
service Users {
rpc Create(CreateRequest) returns (CreateResponse) {}
rpc Read(ReadRequest) returns (ReadResponse) {}