From 40b71a9cf9d76e9e3b145f1ba4101c58dea748a7 Mon Sep 17 00:00:00 2001 From: Janos Dobronszki Date: Tue, 19 Jan 2021 16:59:25 +0000 Subject: [PATCH] Autogenerate services.m3o.com (#37) * Autogenerate services.m3o.com * Openapi for all * Gen * Fix * Whaat * Fix dep * Fix * Hmm * Install make * Debug * Debug 1 * Location -> locations * Fix * Intall protoc gen micro * F * F * F * Push * Rename secret * Fix npm install * Fix script * Fix v2 * Ignore errors * Ignore v2 * F * F * F * Docs index * Add hugo theme * Hugo tania fixes * Change gen * Change gen 2 * Install hugo * Change gen * Gen fix * Change hugo install * Change hugo install * CNAME * Change articles wording * Tiny fix * Fix gen * Redoc it all * Fix gen * Fixing up protos * Fix proto * Fix gen * Fix * Trigger build * Fix copy * Openapi docs * Flatten * Changes * No date vol2 * Changes * Add make to chat * Fixes * Change * api spec * replace RSS * fix link * Dont continue on error * increase the width * use micro at master * change box colours * move some things * Pushing new readmes to see how they look like * Add skip file * Readmes * Nicer api link * Remove stutter * FIx mistake * set service font weight * Messages readme fix * add other font bold * Notes * Remove post from url * Revert "Remove post from url" This reverts commit 5fea2c23d0bafa910f5dc4d4cc63f71f578530e3. * move exampleSite to site * replace exampleSite with site * update readme * use filename for post * update index * Add source urls * set source as params * set source as params * Fix entries * Generator in go * Fixes to generator * F * Change doc gen * FIx cname * Fixing protos * Change to makefiles * Fix gen script Co-authored-by: Asim Aslam --- .github/workflows/docs.yml | 68 + .gitignore | 4 + blog/Makefile | 9 +- blog/comments/proto/comments.proto | 1 + blog/feeds/proto/feeds.pb.go | 340 --- blog/handler/blog.go | 6 +- blog/main.go | 6 +- blog/posts/README.md | 32 - blog/posts/proto/posts.pb.go | 498 ----- blog/proto/blog.pb.go | 263 ++- blog/proto/blog.pb.micro.go | 2 +- blog/proto/blog.proto | 3 +- blog/skip | 0 blog/tags/proto/tags.pb.go | 510 ----- chat/Makefile | 27 + chat/README.md | 61 +- chat/proto/chat.pb.go | 777 ++++--- chat/proto/chat.pb.micro.go | 2 +- chat/proto/chat.proto | 2 +- cmd/docgen/main.go | 305 +++ cmd/skip | 0 {blog/comments => comments}/.gitignore | 0 {blog/comments => comments}/Dockerfile | 0 {blog/comments => comments}/Makefile | 7 +- {blog/comments => comments}/README.md | 0 {blog/comments => comments}/generate.go | 0 .../services/comments/proto/comments.pb.go | 461 ++++ .../comments/proto/comments.pb.micro.go | 0 .../comments => comments}/handler/comments.go | 2 +- {blog/comments => comments}/main.go | 2 +- {blog/comments => comments}/micro.mu | 0 .../proto/comments.pb.go | 0 comments/proto/comments.pb.micro.go | 110 + comments/proto/comments.proto | 35 + comments/skip | 0 docs/hugo-tania/.gitignore | 1 + docs/hugo-tania/LICENSE | 21 + docs/hugo-tania/README.md | 84 + docs/hugo-tania/assets/js/features.js | 171 ++ docs/hugo-tania/assets/sass/base/_dark.scss | 51 + docs/hugo-tania/assets/sass/base/_grid.scss | 29 + .../assets/sass/base/_headings.scss | 171 ++ docs/hugo-tania/assets/sass/base/_links.scss | 19 + .../assets/sass/base/_normalize.scss | 379 ++++ docs/hugo-tania/assets/sass/base/_reset.scss | 5 + .../assets/sass/base/_scaffolding.scss | 179 ++ .../assets/sass/base/_variables.scss | 21 + .../assets/sass/components/_bio.scss | 11 + .../assets/sass/components/_footer.scss | 77 + .../assets/sass/components/_helpers.scss | 18 + .../assets/sass/components/_highlight.scss | 165 ++ .../assets/sass/components/_navbar.scss | 166 ++ .../assets/sass/components/_post.scss | 173 ++ .../assets/sass/components/_post_tag.scss | 26 + .../assets/sass/components/_posts.scss | 68 + .../assets/sass/components/_projects.scss | 58 + .../assets/sass/components/_side.scss | 57 + .../assets/sass/components/_suggested.scss | 46 + .../assets/sass/components/_table.scss | 49 + .../assets/sass/components/_tags.scss | 74 + .../assets/sass/components/_terms.scss | 15 + docs/hugo-tania/assets/sass/main.scss | 26 + docs/hugo-tania/images/screenshot.png | Bin 0 -> 58488 bytes docs/hugo-tania/images/tn.png | Bin 0 -> 28007 bytes docs/hugo-tania/layouts/404.html | 9 + .../hugo-tania/layouts/_default/archives.html | 41 + docs/hugo-tania/layouts/_default/baseof.html | 12 + docs/hugo-tania/layouts/_default/index.html | 92 + docs/hugo-tania/layouts/_default/list.html | 37 + docs/hugo-tania/layouts/_default/single.html | 55 + docs/hugo-tania/layouts/_default/terms.html | 22 + docs/hugo-tania/layouts/partials/footer.html | 21 + docs/hugo-tania/layouts/partials/head.html | 12 + docs/hugo-tania/layouts/partials/header.html | 22 + .../layouts/partials/svgs/social/dev-to.svg | 1 + .../layouts/partials/svgs/social/email.svg | 1 + .../layouts/partials/svgs/social/facebook.svg | 5 + .../layouts/partials/svgs/social/github.svg | 5 + .../partials/svgs/social/instagram.svg | 1 + .../layouts/partials/svgs/social/linkedin.svg | 1 + .../layouts/partials/svgs/social/medium.svg | 1 + .../partials/svgs/social/stack-overflow.svg | 1 + .../layouts/partials/svgs/social/steam.svg | 1 + .../layouts/partials/svgs/social/telegram.svg | 1 + .../layouts/partials/svgs/social/twitch.svg | 1 + .../layouts/partials/svgs/social/twitter.svg | 5 + .../layouts/partials/svgs/social/whatsapp.svg | 1 + docs/hugo-tania/layouts/rss.xml | 27 + docs/hugo-tania/netlify.toml | 17 + ...s_48b060fe05b0a273d182ef83c0605941.content | 1 + ...scss_48b060fe05b0a273d182ef83c0605941.json | 1 + docs/hugo-tania/site/config.yaml | 32 + docs/hugo-tania/site/content/_index.md | 1 + docs/hugo-tania/site/content/explore.md | 7 + docs/hugo-tania/theme.toml | 25 + docs/skip | 0 etas/Makefile | 10 +- etas/README.md | 8 +- etas/proto/etas.pb.go | 10 +- etas/proto/etas.proto | 2 +- {blog/feeds => feeds}/.gitignore | 0 {blog/feeds => feeds}/Dockerfile | 0 {blog/feeds => feeds}/Makefile | 9 +- {blog/feeds => feeds}/README.md | 23 +- {blog/feeds => feeds}/generate.go | 0 {blog/feeds => feeds}/handler/crawl.go | 4 +- {blog/feeds => feeds}/handler/feeds.go | 4 +- {blog/feeds => feeds}/main.go | 6 +- {blog/feeds => feeds}/micro.mu | 0 feeds/proto/feeds.pb.go | 535 +++++ {blog/feeds => feeds}/proto/feeds.pb.micro.go | 0 {blog/feeds => feeds}/proto/feeds.proto | 8 + geocoding/Makefile | 9 +- geocoding/README.md | 6 +- geocoding/proto/geocoding.pb.go | 9 +- geocoding/proto/geocoding.proto | 1 + go.mod | 1 + go.sum | 4 + helloworld/Makefile | 7 +- helloworld/proto/helloworld.proto | 1 + helloworld/skip | 0 location/Makefile | 9 +- location/proto/location.pb.go | 857 ++++--- location/proto/location.pb.micro.go | 7 + location/proto/location.proto | 11 +- messages/README.md | 17 +- messages/proto/messages.proto | 2 +- messages/skip | 0 notes/README.md | 12 +- notes/proto/notes.proto | 2 +- notes/skip | 0 places/Makefile | 9 +- places/README.md | 4 +- places/proto/places.pb.go | 825 ++++--- {blog/posts => posts}/.gitignore | 0 {blog/posts => posts}/Dockerfile | 0 {blog/posts => posts}/Makefile | 7 +- posts/README.md | 90 + {blog/posts => posts}/generate.go | 0 .../micro/services/posts/proto/posts.pb.go | 738 ++++++ .../services}/posts/proto/posts.pb.micro.go | 0 {blog/posts => posts}/handler/posts.go | 4 +- {blog/posts => posts}/main.go | 4 +- {blog/posts => posts}/micro.mu | 0 posts/proto/posts.pb.go | 736 ++++++ posts/proto/posts.pb.micro.go | 129 ++ {blog/posts => posts}/proto/posts.proto | 1 + routing/Makefile | 9 +- routing/README.md | 5 +- routing/proto/routing.pb.go | 9 +- routing/proto/routing.proto | 2 + scripts/generate-docs.sh | 27 + scripts/skip | 0 {blog/tags => tags}/.gitignore | 0 {blog/tags => tags}/Dockerfile | 0 {blog/tags => tags}/Makefile | 7 +- {blog/tags => tags}/README.md | 13 +- {blog/tags => tags}/generate.go | 0 .../micro/services/tags/proto/tags.pb.go | 779 +++++++ .../services}/tags/proto/tags.pb.micro.go | 2 +- {blog/tags => tags}/handler/tags.go | 2 +- {blog/tags => tags}/main.go | 2 +- {blog/tags => tags}/micro.mu | 0 tags/proto/tags.pb.go | 777 +++++++ tags/proto/tags.pb.micro.go | 152 ++ {blog/tags => tags}/proto/tags.proto | 1 + test/integration/blog/blog_test.go | 6 +- test/skip | 0 test/template/Makefile | 9 +- test/template/proto/idiomatic.proto | 2 +- users/Makefile | 9 +- users/README.md | 4 +- users/proto/users.pb.go | 1978 +++++++++++------ users/proto/users.proto | 3 + 174 files changed, 10914 insertions(+), 3157 deletions(-) create mode 100644 .github/workflows/docs.yml create mode 100644 .gitignore delete mode 100644 blog/feeds/proto/feeds.pb.go delete mode 100644 blog/posts/README.md delete mode 100644 blog/posts/proto/posts.pb.go create mode 100644 blog/skip delete mode 100644 blog/tags/proto/tags.pb.go create mode 100644 chat/Makefile create mode 100644 cmd/docgen/main.go create mode 100644 cmd/skip rename {blog/comments => comments}/.gitignore (100%) rename {blog/comments => comments}/Dockerfile (100%) rename {blog/comments => comments}/Makefile (55%) rename {blog/comments => comments}/README.md (100%) rename {blog/comments => comments}/generate.go (100%) create mode 100644 comments/github.com/micro/services/comments/proto/comments.pb.go rename {blog => comments/github.com/micro/services}/comments/proto/comments.pb.micro.go (100%) rename {blog/comments => comments}/handler/comments.go (95%) rename {blog/comments => comments}/main.go (86%) rename {blog/comments => comments}/micro.mu (100%) rename {blog/comments => comments}/proto/comments.pb.go (100%) create mode 100644 comments/proto/comments.pb.micro.go create mode 100644 comments/proto/comments.proto create mode 100644 comments/skip create mode 100644 docs/hugo-tania/.gitignore create mode 100644 docs/hugo-tania/LICENSE create mode 100644 docs/hugo-tania/README.md create mode 100644 docs/hugo-tania/assets/js/features.js create mode 100644 docs/hugo-tania/assets/sass/base/_dark.scss create mode 100644 docs/hugo-tania/assets/sass/base/_grid.scss create mode 100644 docs/hugo-tania/assets/sass/base/_headings.scss create mode 100644 docs/hugo-tania/assets/sass/base/_links.scss create mode 100644 docs/hugo-tania/assets/sass/base/_normalize.scss create mode 100644 docs/hugo-tania/assets/sass/base/_reset.scss create mode 100644 docs/hugo-tania/assets/sass/base/_scaffolding.scss create mode 100644 docs/hugo-tania/assets/sass/base/_variables.scss create mode 100644 docs/hugo-tania/assets/sass/components/_bio.scss create mode 100644 docs/hugo-tania/assets/sass/components/_footer.scss create mode 100644 docs/hugo-tania/assets/sass/components/_helpers.scss create mode 100644 docs/hugo-tania/assets/sass/components/_highlight.scss create mode 100644 docs/hugo-tania/assets/sass/components/_navbar.scss create mode 100644 docs/hugo-tania/assets/sass/components/_post.scss create mode 100644 docs/hugo-tania/assets/sass/components/_post_tag.scss create mode 100644 docs/hugo-tania/assets/sass/components/_posts.scss create mode 100644 docs/hugo-tania/assets/sass/components/_projects.scss create mode 100644 docs/hugo-tania/assets/sass/components/_side.scss create mode 100644 docs/hugo-tania/assets/sass/components/_suggested.scss create mode 100644 docs/hugo-tania/assets/sass/components/_table.scss create mode 100644 docs/hugo-tania/assets/sass/components/_tags.scss create mode 100644 docs/hugo-tania/assets/sass/components/_terms.scss create mode 100644 docs/hugo-tania/assets/sass/main.scss create mode 100644 docs/hugo-tania/images/screenshot.png create mode 100644 docs/hugo-tania/images/tn.png create mode 100644 docs/hugo-tania/layouts/404.html create mode 100644 docs/hugo-tania/layouts/_default/archives.html create mode 100644 docs/hugo-tania/layouts/_default/baseof.html create mode 100644 docs/hugo-tania/layouts/_default/index.html create mode 100644 docs/hugo-tania/layouts/_default/list.html create mode 100644 docs/hugo-tania/layouts/_default/single.html create mode 100644 docs/hugo-tania/layouts/_default/terms.html create mode 100644 docs/hugo-tania/layouts/partials/footer.html create mode 100644 docs/hugo-tania/layouts/partials/head.html create mode 100644 docs/hugo-tania/layouts/partials/header.html create mode 100644 docs/hugo-tania/layouts/partials/svgs/social/dev-to.svg create mode 100644 docs/hugo-tania/layouts/partials/svgs/social/email.svg create mode 100644 docs/hugo-tania/layouts/partials/svgs/social/facebook.svg create mode 100644 docs/hugo-tania/layouts/partials/svgs/social/github.svg create mode 100644 docs/hugo-tania/layouts/partials/svgs/social/instagram.svg create mode 100644 docs/hugo-tania/layouts/partials/svgs/social/linkedin.svg create mode 100644 docs/hugo-tania/layouts/partials/svgs/social/medium.svg create mode 100644 docs/hugo-tania/layouts/partials/svgs/social/stack-overflow.svg create mode 100644 docs/hugo-tania/layouts/partials/svgs/social/steam.svg create mode 100644 docs/hugo-tania/layouts/partials/svgs/social/telegram.svg create mode 100644 docs/hugo-tania/layouts/partials/svgs/social/twitch.svg create mode 100644 docs/hugo-tania/layouts/partials/svgs/social/twitter.svg create mode 100644 docs/hugo-tania/layouts/partials/svgs/social/whatsapp.svg create mode 100644 docs/hugo-tania/layouts/rss.xml create mode 100644 docs/hugo-tania/netlify.toml create mode 100644 docs/hugo-tania/resources/_gen/assets/scss/sass/main.scss_48b060fe05b0a273d182ef83c0605941.content create mode 100644 docs/hugo-tania/resources/_gen/assets/scss/sass/main.scss_48b060fe05b0a273d182ef83c0605941.json create mode 100644 docs/hugo-tania/site/config.yaml create mode 100644 docs/hugo-tania/site/content/_index.md create mode 100644 docs/hugo-tania/site/content/explore.md create mode 100644 docs/hugo-tania/theme.toml create mode 100644 docs/skip rename {blog/feeds => feeds}/.gitignore (100%) rename {blog/feeds => feeds}/Dockerfile (100%) rename {blog/feeds => feeds}/Makefile (62%) rename {blog/feeds => feeds}/README.md (68%) rename {blog/feeds => feeds}/generate.go (100%) rename {blog/feeds => feeds}/handler/crawl.go (93%) rename {blog/feeds => feeds}/handler/feeds.go (95%) rename {blog/feeds => feeds}/main.go (73%) rename {blog/feeds => feeds}/micro.mu (100%) create mode 100644 feeds/proto/feeds.pb.go rename {blog/feeds => feeds}/proto/feeds.pb.micro.go (100%) rename {blog/feeds => feeds}/proto/feeds.proto (78%) create mode 100644 helloworld/skip create mode 100644 messages/skip create mode 100644 notes/skip rename {blog/posts => posts}/.gitignore (100%) rename {blog/posts => posts}/Dockerfile (100%) rename {blog/posts => posts}/Makefile (55%) create mode 100644 posts/README.md rename {blog/posts => posts}/generate.go (100%) create mode 100644 posts/github.com/micro/services/posts/proto/posts.pb.go rename {blog => posts/github.com/micro/services}/posts/proto/posts.pb.micro.go (100%) rename {blog/posts => posts}/handler/posts.go (98%) rename {blog/posts => posts}/main.go (79%) rename {blog/posts => posts}/micro.mu (100%) create mode 100644 posts/proto/posts.pb.go create mode 100644 posts/proto/posts.pb.micro.go rename {blog/posts => posts}/proto/posts.proto (97%) create mode 100644 scripts/generate-docs.sh create mode 100644 scripts/skip rename {blog/tags => tags}/.gitignore (100%) rename {blog/tags => tags}/Dockerfile (100%) rename {blog/tags => tags}/Makefile (55%) rename {blog/tags => tags}/README.md (70%) rename {blog/tags => tags}/generate.go (100%) create mode 100644 tags/github.com/micro/services/tags/proto/tags.pb.go rename {blog => tags/github.com/micro/services}/tags/proto/tags.pb.micro.go (98%) rename {blog/tags => tags}/handler/tags.go (99%) rename {blog/tags => tags}/main.go (87%) rename {blog/tags => tags}/micro.mu (100%) create mode 100644 tags/proto/tags.pb.go create mode 100644 tags/proto/tags.pb.micro.go rename {blog/tags => tags}/proto/tags.proto (97%) create mode 100644 test/skip 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/) + +[![Netlify Status](https://api.netlify.com/api/v1/badges/bae5db51-7cc6-41e2-9615-029ade8aa264/deploy-status)](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 0000000000000000000000000000000000000000..ee96f4a461385a96083043ab7393a2fd1f216b0c GIT binary patch literal 58488 zcmeFZcT|&G*9VAt5d{$&pdetmN(YtRZGh5y4=A04fC`}}sHj{;Kq(@ET>Rjo3=g=MLIc9)^kWh%@Ff%8cZGMQapdbO=9NjE|4$@f7qGf5^bWw`T z^?`Lf3O&Vn-#@fz9HqU_^Pj8eLoc-cGj_fG>*W88p9`O=Kk`50U)+B%|1%}*ztjJp zuFU!QlQ|t+Twhy(7(`Lg{nXUdTbVt)Cr;Reh1G*@oj;M|`tRb#p60B$MPiRP;UzcU z+FVI4aC?10Mn=X846gY0?b|s~Q6vh0rRPL4Eh)8N9piuhtKQOz!)=K=k?XT7U5cc5 z`&>znxhS2Rqvg47Z|&)yKZ)#n7NJC43UHzwpr1c*Ywe? z_U=n|dwfIc($}Y1d-P&*1)@x)OYzd}=IC%QF0NmAuhp5J#wWwKi)_u(e zfjHKuDXnuJ+gx0d3cB2fxFqF#wmvsCX@iHq+@a-YnTRFxt}%CerWbuILh>JSUyD8B zQ{9Hz-MTKAnod-fw#d~XyF}LZ62(GCCwLjza39z>Oovz*s}SvzL)-eeQfo?hKBmL^ zR^@NrrRTd5hViFvsg)!j%_+=o%h`)=+uNcKFQ0(o
      VuIF{bwpo?>dZyVG3k@Cn zT{ZMcZ9%)CMsbRqpp$N7&Mnyr6b;{IlTndg?G199TXd<}i!ONF`lf3852-)Dmp)X) z3}i{?&b12Y1w%UybN#xn&k;HG$F?>$vpcJOr00i@)IcK<#qx@_i=v^WtEriT6Dts) zo_jVEDhm)u97BFIha);Ll)(;`d>FPW!pO5jl1WxzWCC z_S@=<@$$+MxC6`KFiz9oz=6>pXO+E2!*F_DF)+Pb zp`}KI>cr+Ua5!^C%FY-*q~L@&VvENIn@+ew)nG3}gtO1Th_tauajKmwKf-+-^FS3i z8YI8g4pNksly_%NeCZOH)(t$|N4*=cf7LjK&TR=*FY^O|xjFbwa zVzHXlskW^GbIlh~3q&jRH9vs8u#^ef=?D1KVhx_8n_TA?(;TcG+Lzq9o063D%=ca5 zaftF!8HKGU&Q|U(6D%*#5{+j|G=iFmZ8}Lh{9IgNhT!Q#;8B;n%V}8^D{w+h<)*p} zf?SS3-TW~#M;HEFiggV$f==yH`PJ{n3CT~(**MomS7)e65q^rR+B;t0u)YmP**!n| z36IBLxq6j|wyy7GN>o%;-SYDCDl^a3H8L{``6NZ+juG))DGj0j)OMJgo8#r@hxF(< zWUjsV_~TvthYVFPJ%VW}D2li08l(A+<*=uLh_x0L6|yW#2)=QvRC)yYG*Ay=9T{x7 z&AhkPEt!m2>ar9W+~*ezV-K5NbGo@}Obwp6gz+0Qlgtf;>t@xMTr0*eB?n?{x8^{s zUh6tviw*@KxhdI90v6MpfiuJ8q+AJIO%(Zwj4f7lE3w>g%U2N7DqZ~$$6{|@lR*bT zKCbs!Q))}-U0xTMw2;h|(29Y~L_pylKnv-|=+y-O%`c(^N~V{0oKE2ge zgJ1S^h{}yNgc*OE-NYp5>No+ip_BhM_x*sEy=#e<+eLIqF4Qqn<{7K^?8e-WP$6WM zrg7hBRN9PJrc2jww+gw*A0gh%2mwU3K^oainu-VDjY-Gm`>J#!%nEI}kyV@-y!@R3 z={mdUJC`te@9Kg)5uTy9d=(JA%a7Ws)7?V}1qOBROR(!H^-pn8@kd{`t6JZFkfNZY zVvsBu9|T1o$kF`+Im(xJ_;Q;{enqElJ4;x@S2@VVzJ#b@{q3sda>%8s#ud8IIWrxt zr)enYx(;-iS$In>+I|D4Whv;5jC3@94GWvQ+##{$R=TAxKxZ8HSX-Ej>+9l8VZY8k>>%9Gr_Hd9@jl^)5kSeUO(oX2by!S7_qF2%CmIFNr?*?r z6c5h`Xj}$f<5By$%-2ts+wYj9sMS^UfZn12{n^}UTqHix##6Asde4S3%!Zc32Fl4PL zCDOmmz#~?viK&)!l*E3Zy^Blvd^r_(ULucP07ZPKmR(=gt#Sg^L~aC_D{^E|?q3;H zatIw$#(bPgyzk=+8=wBc%YVa@rJu&<`w4Uga_j9$&bS(?8Pjm`Dkgf?FcpOmuo-79)Z=W*uejv@oa|+^!G0lWveh zbdzN1=$pgV;@_xZ#6)!LlQ3oyrjF&-i!fqkq7S1e003D}6_|^OG$(z_Z3j~KtjzoL zt_LmuQL!PG*N@i8OOAwCZ{*-0Jy!#P7S&gJ9#R+Qu8r^;@Lz<*_D-0luo*E4_YCfr zcLl$j(rW8V7DA9`hTC6ikDRq0tg^g^@f~xyhibZW6<5P_ff8_&&NhNwpux6N}%<2w8Ylt`QUB+hvYR=HLy5= zsv^H#A4gU`8N$+vesl!9v%b{Cp8!kCJx!C*n)-cWG0~p%alij%xZb{d#?l1!9p7@W zrb5Vq(|XK1&ES4%(^1OYWNxXFnOG@TA7PT3X=5?yl$J%bhUF}zwwMEY8!V{rHb8T= zg$BRHN`!oL%hNr?ZEYYQPkMR-7YcG&cc-Ec>Z+s{=5WWhja;W_Elb-kvP|4F>^k|tONE)cdW35!vbG#>9duh# zC84&gzW%<~3-BOXKmNLj6ABR#9%A9}MdS~$oxvTk)C*+TB^RhxN2EyB4soLZ1aZoA z=nJaroYaw#t^~1)LLuX=i450{;PEL%&{L-uohz!P1$IDUW#-F`?w^3rF=S*;xLc4K zakfUb*Ov1AQlHZvZhd~FkmMGruSg|Zw7f8QEeWykZ0%hMifX5b?Q2BCIsEhXudiZU zPrmUUKmL@euA)Q|n`CcaI43$?qTY8-j2S6q5ju2TXPBAges%XZ4fKSnPV}rTyBB+s znb6UKzjF`cKQbw7O?V@{vU@ML8`9Z@u#LK3zXMHZiuCh+@cCqIil7hj``G=bHw{sv zr!F83-iQzf#ZPwZ9|M`@G()E^XGadDH!hJW$`PX%)9+%XP_UyDkDlz%Xpv278A{(v zLh#LD%sbgiYbO9vyHs}6w=?PP*wV-EOZd3B@EsY2ZG5Uo)U%45uwQqm5$K=@hiau0 z2(qem*G8jpu7-wQNtW=h#JC=X%tCxWZDZTn6oaUaEnR&GRnA+S@EhI|_Wiq|M5f!^ zh#A#rpaV%nH9q>1!JRr6rs;8GM>Pqx_2C-+WyjY`~t9hM3 zWI&W(nozlxb_VWCclqd*>c)@-y5Cmj2+}s(_jbhdq|DdSCH41JYFk;p*+yN)kS8vV zHvU)JLt4?`K^lYQu0~V@Ek0+zNC!y7o#5w zJdBq?eIe$w6U65^fWc;4KJHDUYYp2rq9aB=IYBR&_4}8h%OjcevtNw$D#$d)F1^Bn zf^U%V40-2TDLuV$R#R!|1FcZz;A)>9ny*i+z?vd7J0dEIJ$h}h?#D8&lcZqf*KeVcnM5BVtxGVbWXziJ%f_T85n2 zzGJMKQr0dGw>H-y5+-%_UOY~~hk;V9gE!m#QZI-qd(kGq;IR$&YXOwJh6KF;fl8Wh z@2I|}dVmhXQL^oCCUMiR>trn7x@JYrEk`Ynvx9}91>AEvx?Eg4LP6=UEDV4@6Jy!> z{nVD0uJK8;%TIfh%ROGHRyY<$5du@RZ>HOZl)F9OQW^ZEBN0&;I;hzd-{@`C5 z@sMY24Qi|CM#qy+x*-+p11!uQXM5wQcY3TxA+~(RJrNT~f1RbT_jr$~_ma`kw{H`e zjRlY6U8CsX@#)%z1lW#2q7Dn^o*^z?CO)up7oeg&v~0MjBBJAsfaPd9Cb~u9yuHNs zj;P;)Bbnl`VmsK9gwArWT83^=LUZ_rA9bt6Dm#3RMbA1nF}G!Szl@UFQ}g&+Nd$}W zFk`}j_E{i@lq#^3m+|w_2+)+RAHF_ydiZwC8|6Xz1&_7fVd;!HhsC-@-4dikX2nl+ zJ=@Qv6DPSg!El}di~`bPAwt07r{#+;C-y|1jNN!G=s%bUik=p~o`0O)-)--P+pM1o z3TgxOUxAi@{afj?2Ov#+m#LFK`rs*<4k3_+oVYhAyaH#JP^1lNtD|8~-qEbnDZ5KySY-?u-s-Yf&k) zhujoi9iX9SH+NQ(PKbm;#v7(17~Yw+(Nr5Z9ikD(*WGjX#3l!wYMlhXXxv?==*V+% zWrdvxp;fdU;!=O1!T699w0z0*H8QSwZ)pxZSPXo7KH1{0y@qCU=-O# zTJnfyT|6z}3xqoYya^!>de-ZPFYt2D$XTRS8_w+s=nkerMSfVNqy5I4DmI$4r`6p* zYSKoLkf~`OV2{1PY}}5L@?3Tot1o{02-gn9(ImA~QO-WhKk07bQ@+z!YWcU(!y_*X z1s9wPUm77N-9^9GxdPT3=~jX%HeKgWP0HZxlHAJkKC8dpY}_7}!^kKo*j9{OAOCu) z?Y@3Jv(>!Ko!81Qv$FHn~X`0~Ct^iuMUBRf@seWUfa#74c5x=~C1P|;_xGdemZV-k@9 z9KC_h)Px|I4cj4rfpHWMisOYB<#txrbty`@+_98K=@RwRWfX@?97T)Fg$(9uRu=~d z=6VYm2ad`+j-$fGL+h9rZ3u!;z;#lZc@G5QO{_Ll^HHZ4dUH**0ul6!%es$UUySWn zKFG!j{Opj3F8}@8vrlC20;GXYW#v83;4ef+Fl9vST%IO4eYe?_EoUkKQ!-0~uw_GU zZ~#|H8CvL78oxFAV)*N-0TR8jx-i&m-vF8VN=gN}(!WY~_qS+|OT#@CUK>&}4``F9M*ju_Cv1jmb09bgTSv#TtyLOm zpy;6!HX@z(nG#^(@#%gbW79RbUtieo`-jW>o0tCJtgiflORfHHwXom2+HbrWYGiC| z?dqD7q3l<{0R|iIu18OOm#3|Z?>q<{GGQ%GG|zILA9)f+DwVjbjt^YQ=0G!74>bF~ z^o!f&-2qU2KwtR|p8YQ^9X=fTKSQpj=Lg&JFDYK)*yexfztjJ_GXFo~nJ3>UxwUuv z!fkVWVn@nT$&~>yCsUktr*-B`{JHtS6cg@<)n(xtc#}c0-oA|ojcFIVr*keq znov;Yp-kUJvk2Y#owp1TkmN9K_TEZH=urEGh~Gc1(P3uxuN@dE%^`1Gqjx=^df~;N z0=ldVIZ(kRx!Xt0_gm*>biNpmLs{v%?2wnRENuX2-L@3Wu;b+m_NUw&{N%~#xGBL{ z=xg_*X9>y({AJ%|aC1dz(DxfMake5=MI_2fbZdLqwjr{C88&%jOO>7{RQW=NjJuN? zwf0eW8&-9FU)%n|bPJGr#qkbIm#jt8!QE6eoPcMt*w|dq&f4o+YQAvw$Xea4B{3+Q z^=C!TN6lJL@gu{1%(yOM(R$Z5P1U&2Ai9tf@kwi!y-pH&)#-~S6vK^eP7RsGV6SQ9 zP;5S9^mB3BC|z+i+iH8b%&mq7tAcx;>g+sqc7Us{arm7c+oqk!4p;&y3zBZ+Kj!qb z*Tc7T;8{mQ{5-{NA^Dpa)zruhe>)Jb>NLKme6MTZ8L|FhkbY!B9nl6ZNWc#v3-LoK z+#oN3I6}9%IB~C@FsRVmx0`XWz0c2zUp>(43aS|Re^?|3i*TzciF%76n6n@%{s_Fh=AbRh9VM$4+`>`QEVYffQ zTMx$-dQ%!uE_(0x?;Mghw;LZ?mKno3CE}Of9@fmxk7NeRX|0${D{PubbelpdC_u!} zy1upY8RnJjv zEFw-}A+t2m5Lb}yyc%s;hx6?d!7c5?-l`EVh-B73ylQ4P@R{WLb99Z@JkgD;xhgt+ zpY=04bTqFz(;hgu8VCyA>NgxO0P97=X}Zp(;xrf3HnYhLSJ1_p=L__m-gBav`AxhM zU@d<$%8q97H$pb0$rE9U-Q$)hr!EPU0>{DO;@XUUe_#<~`Q7v?RuwLU{~f$+s|YOd zX|4z>Y|d$PBaH>a%@{;|G0k9tiW+}fG~KC!%qTk&uwl8~yE}+>j%3XbxlBi@0oUIE z0pSdmW&=nILLaifif*=Pi^G!;S>w&8K@&{*TZYOuw3Fb$T8J~h*1k3*Kn#gM0L>Fy zJKx2nj_&;#U%zAm@uL`tVb_PgT!z|Ah3$TG8$CN%oGmNtYwXyB!mr$A(T5EHk=X^Z ziWl?b33yV@t;~W9*3X`jI%1NvM@?8~T1IMWo)%iH;8=8wjB!`WttDPSP>35Qkl>`l z&MM|J_d|G5HX?@%6q{pP+4kAy37$^9td;H{N6U^=VTA_D^){t z{2T!w08q05kn8&Mf)t2?3;Y??kILwDi7QxB*%?!7TS`~(Zrc%JCD@rI@$9XFj)s{B z%wZj=mJtsQ%|YRP^E7K1c^nx4+&i=GxARWB&qd971O~kY&W^|q!u0CGW65=lB0fWx z{IScgGgQ4AI>lCL-Q#6(94;tfJy~pBsBof0cARz9}EcNN`5m z8s+IXIAUwUdX-H-Hyc4ZM54gezO*ru^aX-c2wh zq$KpBU$@^EV-HLSpSrZ2&(sA{n&DSYej2{{2V(nSMasu)#WYIJZ#}{8?Iy)S7b;*?$J*lf_nLVM07)d6x3EeSox3p zAd9po)6)w!`g;Lh$kayV6HDExhtD*Yf#1=N|FhcSJo~6WIGH~ok#UCwO09-FkkXj{ zQhOBylJWYIQKRR94p|^irJs~)?s^CmlbB(8-uT`@+OUX+1VJ!zx+m+@!3%r|sq(et#-OaC9_n(osLU5tV+q`*1OV3OO#Wm)HTU#0yz2JUShSt}SQOrM zdyPk)no{=s=*<<+F~cf~t;emhUaS1I2uiA@yFFT*Dkwb3VA2-Ro3rN~!3NwsnxGtP zCUPZ|fh&<1v<=lR6X-DSZ-38wtwX|bd#sN%t1gryiSO#D+>0?Bk-wyFB9y7*j}C47 z>RL#b$ppq#34p7EWatbU^I&X=(Z ztiPN-l>nLV0EVyHde7XX2%8YsObv9_cK9OpDtTDnckAZnneo4aJPp+(B-&mXN?j?4 z320#af{m8(Fq<6fT%hUXYe%~ro3BBc!Ws3F5A1WtERvfui{^oGpygC+U4qrPZp13a zhc$n7gOQI7wCeLDmFxW|c$t(Gadm8=vx|)U{MU_+;-T#f_ha@p<+(`_*(E$Wl=&a$l)-3$q2JYs==>+ch=0m)E z{K+l8HWo{kKdPvx6$EdGWW<*%SMQyhU6hS!u;>y(r_Mdmjr!bTpRE;YVLD+YPx-VM z5LE8bT8@Tv6c%FYMiGdeY_{*WquIgiHcil`DSaXhA<%)c#F!$ay6kU1D!tNr_xGZY zjcKp9sT;H&ww+rE>ahZM1__7XO!f2~EjU6SDl6QHkBve+iWo_kTY8B}}e z&W%9AV9#qHsR3W$PALP#oiWX=HO2Ifgj8Dzo7n;@k+T1YZtVHokR|P-9O12bIw2rq zcCow#oFEtP{=a<8lD|v62vYLtx6G1hDB@5BQW>@)bB(3xmXNF(iZvLmsDQC_hb_L75ZVuMt$9wkWU~b_@W+8WR@jpJI%vtyQAKU%zpAmSlA% zDYf=dQo9MDXhAC!$WHlz0RD8ek3V1V{VFhXQ%Yvg5c#Q(*nN$G31Vo*@B8IMxr-pb z_$D^4>)d;ruoZjZT++`6(#1L=+q?JW$1+gFAW7dD_L=OU)dl+aPxESgl(R9>(0o+c zA^%W5@SJVQ@v|k;Rgh2!@El5zAnDiJ2_{!P<=6t8sq{jIjAT!d^_!4nKhiDv-o&38 zyPDr;<-7xB2sI5|DFa>~8jD{w)?QMByq*zmW4wd)V4`<}!JQZorL)Zm3(hRwS2o2Q zj|pa^#t6=M4Eb#{zbR|6jatL>y9tqQN}=;bL-e4v3?pm7jJ z_Nuvx5cXx^B(ch`;BZz;RZkIs67oYYzf7bO+YHf0;f?$=Z>&s`ESNG6x;_ zubv=heJcCyT_GsU?sA_B$+X?#S(lN;yQs#XCogs>CnSDoaVo3GBnS?a!ZX_cz-m!| zH9^)H=f;PhzQ3EAiLu}2ll5HUvwBuo{BEt{XF|3b1Px7c*B4*Hc zHG%pLIBdj!m1-Fr&J>5+y`C$YsdQSN1GD>8O$1JWE1+9mEBpyoT|)7KleA%Tto}Af z;p;ytAS(y^X9iiz5j#!BkuQ0Zqjp{rzc?zj#flY*H%~Eo_H-zoaRHY-mR-f9Dr_Iz zf9a&&mxi>#KAdBON|%Q7UDK~;G+`4rU>(b~vdY)*$ctY8jvkZRUOC)xvsWgmhg3QK z;{|(3uW)d2grxGPw1t<(oRREtD^keA6`PiSz?iJ(2f)o&y>_wsT%>TI`s!!l%X|DL zf{qcp=^K!N>_kRQdvBa{$n@gpVnYM)&{Uy>72y&y=b&bh>&bT7o*xJAUt0Vnajvk| zG-i#6RGg(M;t3@Zc(mj=+Y!*KXBdC@IOQK~DE8(zj_bSQam(IxKqxXYn~20<|LDP| z!tI<%3jK{WQI62V#DYjY7AQF{LeS^n4P5^VGZK}O{txu@-|9lH{}xjIf58NgzG#Js zAK`j(x5^oa(JQ%am$`bi-?0DbGOxf&P~YFV?$w`D($XZ8+X%lNt?}ErTfL9s&v}FY zh-rM_$jyO=UKjz-N$%q}8-=Xl&w}En$sAnx=J6lAET8$q2kiXo1_vAcdb}_AQM^L^ z#7)7JOtHQzkVQryePzsaRB4~j|C19KkX!soM@xDZf6722F=J?DNDk@w)>O(y-! zk;bi|v{XmvCdk0o1%%sOrqIuc{_fWin8*JJ@gJ)N8Z^|oSm1PiO7KvhV{`1 zIJ$pzr|$<X8zu)IjO*h0Puv_m@V7T=fXUCt8r`*L z%p}f~ne8vBJi(fJgyZLPO#?ETHhvvj*6T!6tV)WVuGO;rH$l(Cdt54T zl(adPVPJocxv8BW?&I1&kKVC9&@r2_MP}hfb=sRRiz|B4rrnles>v%l5v>)~&QCrIP-Ea20rweg$086;vTP~bNtz&zd~@?GL^PSOf5 z(Gk}02+~mK_Lvj)_8=fN8fmgJNbS9TW&$*``bqqh%BZn2m~41Y5qID8>dA(@l!Bc;q{2U%o$(w1QAw4NUdcihTuHSj?l4PX$dRIz zTOArp{)WvSZbqG*wxB(qmmWS(z_<2Spquz_4GZss56sGv`LE(Kj#rSQ7Lbuq>t4{D z+4Mj(lsWX`rHF(bftV^YgQuU3hzp0^zeyfZg-O#l$mc zc~fExX$+OR#r(3mLc&mXja0QsuQ=1dG3Y^Tw&PHZ9Q~Eb@ZSk z%}86QfeyW1Tf4^2h&I`Q91gxjpD+UY4F9D#->F-Xiu-0@FGK=f8AE` zA9bQetoNt3_SrxCyPwvH*cJ5#&L_szD5%(OKa=%(>L1(EQ9As07{-@sx!bGmmbM-^ zHMc)*>2a$o>OG&*zVVJ2P3y+5rL6<&`F#JV0VjjAWIrrVX01vA_LsIZYCYrDY1q~f z$+(g7`S-y++jCmf=)P*QoeeGLX;Zna)8>L~<952aa^zNsU}|F^5?Fz>^`?iIifq3{ z;T9|_#_XSl{n6M{4%X8_i;9a^aKO@r!=o{Un2LmjALD6d`a#h{#)-P6Wuog?pD@c_ z`f(@5af;xOt@MN|aeOw>2X!XD6icPag>`t>JSURxBMA&$ z%LI*IM~p@8Y5*c5M7J~ukFfwaPp#h`LOJx0&%sq=kqi|o#Gqz1-PtG*$DWbGZM1ha zmfm|`*isBN#uHa_6|K^d+Hr}E+0b~`$XylO`X&n~C_3vDXghNhw=+gUln3#&V%o5* z_Rn4j$S1-Lb{XZTu?k(KBSH+lK|ZU7xcA;egU8wrH3r+(n%1&*k&xhTm^_W!8(jdN zp37Jm*zM$T>Cy>bxUqF1@#;+NIbi1oLm)M9?#8?c=GZeipCwybPPX8$#Xa(4#jgG} zOggFq5BIkJ^iBuvmnBleEPgD>B3w-XH!ddi=GaMJs(&pWzNOMpt6O+k?5s`&9#!ib z;~EVqe+TSFt)3=L{;9J(X`JA(|B|VW$GsHG^sA$!;MTNoTMJjx1p>dJjoen^U32TH zI-1n;c`#uBvd%Ty7OndX&K>m%3hE$+IeX{Gf_%kO`G5S|&5eIze8tkT@Af9{APn$K;pfdy z5wjCml{|BE7M<#*HX2eQ(uO?}Fk;f#+Y_3oD)7!8okJz6mbr$1{NMlys$tRlP2;Z~ z@kC1Ze}2oS{TMsA^V@ihe8e93Xpt$R9$ch*5mIgSGCOF#(@E8yu#tjg+n!srf7}px z4)P?dC;+=<$4@7;vLcT3HMuO}SkF<-GeDdQTgNnFKcKDQWpK=yOo&aQ0{9$r(P*FKb{cV|jvL^w(dOhO|o1nd!MdNypeHsTVs?K0enBj)pr$$2&4Qq6>)JOpo6Z zjSR1yfaA^pqTO)lia5$WI_5G<(UXX?fZA16`*H6ICEcs_A zv)1{JCFg=1a5m14Wx3ux)=$GzO(5Q+c&&RGIS8$QCWGC^8hg(NxL_(@Z3UosMP_4j z{rl#9NMO$Ii1{;v4`|uh&q^=8hmPOv8L|5v9^wx>eY4T)_trc9<cz3S(8+d+SS zw?1cwc8Pknojj=c4S*kavMlv--e`R39%EjAW%6WmNPhD+Q*v4;t!&6fGP4KuJjFHQ zSFv-j)1tz=xFtPQocKQfTPV{4Nf#vBI86I}^iK~`xvF?yvM!+5+DyxM55>NtO8jKc zY3gxNLAgB|wsp2HjDb(c7dsKd>AycS5T3dY+uvKmTStvLs(PnEI{05tP*WeSVh`-e zSN!1v@G<&hf1lgqiGJR7Y0?|PAmzvN_7SuS`(P5(+&3^`+aNzWrR?`}Bkh>B?14`v z#1gkCK%fY+B0ToUYNsjI#w+d08K=4O9HwY9xmzV;y=7H%yI`VmSI>O5Vgo-Ypfm$C zcTL{_1yhVM{$uV$F_*yXMDJbo+Oc&Q(pKZLrgHIkK>xc2K2LUh%hW{vGVn}j*q>N6 zhc4rqhV@@R*|*_;8;Um``{iw6asNnL+kIJODU0^02Muvmpz;lg#2m0t7H_-2=n3r?{1SQ3c17a?5K4bRYFYe3gp)Yy})p=)0Wxw0j&t;hr3 z-%R^Qp`pJx+I*cuF*f!<0^OD!Fi#R;4RkfK-*u_1 zysfJVcdH~FJx*H4$WM0`kSu_QJFgLa3xZ~TO z{9cq>wDuY3HD#zwYzMMtN=cAi75ljrj@w_wfdvvp4(*xKBRX$P!_)xV4F4*-nYq>Y z{>EREX3zGUTeo1{1jiZ`e+7!O}kA44co?RBnj5M&e zU$nQa(9br*KIqflt{H>U_@S&Z0x;>9!nGB9emqSYw>FA4PaKQ(`J9IefulfYw1MR#__*~ zw(6Sl`t-u?p>;M&nawM5kN_cRpY?z`jb2+YW*y~LWXOa%7+1q~9d_%uuh$UZR6F0j zH~!O$E(PCF(7~JZC6bXfqCN8E_Lt3ec490RYW|LMKv9(SRoVuXm`mx${TyA(d&9H$a=rf0{$Z4EC zDsfE}TsVe{K=f4>CzGYwkI4QNgRg!V+pHo*A8DU6iHtLMNHOEpb$C}|#)(I?Ce!}t zbyD1(!Izv?8!e)ZZ{4@1q3uWV*%KW?l+x700s+2o$EVp55~~-*GBj0ntKP>?eb&FG zY@Pd}#P4^H!0Z(II`BvN(}<0aaVfKmJ%pWgqrF?NF+^w2{>D+z&+t|Zh$RDdtTfWu z-muyQT|L^d-8T%&b3M;`=Nh?Si(}KJ;&st+QB#ysoL945w}~xr5liCPXOAt1*u8Ta#NHI(w<+xD<;#m z7kT)M@_hN5*pMJn_hO9{lKoSk#~J*#xX-C%O$@6XKI#z9-qEt%H~S?%xZ=rgwh{%e znxPXCOAtk_6D&klMZ`*K$y!g!1#&jvQZ>yWKLq(Oe7g?RE|AL@=@_>Grmh-bnL*RS zXG&asvfv8MJaIJ-uBoWx81A2(kdKw}T~voQU%88;T#Im`zAO-7>>y6WJ7rC)>xJ~} z(UlfLhP18Tllc=!3`R0h;j&Hk8_dtYqcS7Z%G8>uEsvHgsl^v z)%WEO0M4&^-~Ur+^Cw8Zw%s%x4J3(abDYlJbI|oR5?;f!_XJ5lh9d2=(C3uIMD>At zsR(NLbz5O3DMSA(iyWzkSo#UL58tfC1+PB@2QTSn38ovX_=TgkA3`dDQHN8ok%jMe zlLr61Y-D=GNI9rKgcSdv>*V~v3P9sls-P@*`zTb6eZ6@c(yQtaduWilV0_WlMeT-%iJ*IxWn1x`&dH(3f;s> z*{6!r@>AD_)DYsC%Bk`3+`71Wv;dRAT8_&|V>U0H${4h*1BAY~5?yibeTy4x z=12xcj;c~M>V6Y>2N^&gxza26a?xeEP-syq6vCfKFXvO3M_es*sCzeWn$d8{wzqW5 zTkVIZN~y1TBk-Pxl(fu!+sHKE`IkD(UZX*M(n-rB5LQImO9@i>@}mW*u1Xwq7%U2pgq$BRo*svxp2i8uHZ8PiqRp?8 z9wgqzbG4}~mW%gH3Z6Mr`g68evkXvuZ(kwn?xb_s+wlD6t;fylBvsP)F|aMQ2<{Y1 z@l5nZT(^W(i4+c&T6TZL3zc?+w>s;Mv-P$QRK#<9ZVU5b2&b>_c=!K_IZEt5U<|i} z0tbSG5i-z9W;Cbcuq!AnwM_An+?{*uH?uUyIn>9=LsZ3qEVV%U4@x*lX?F%(6fF*? z7Drqyg+@VIjs(t5tZH_4*p*xx$CnE0Iu{p^*=jS|-HPgWeOw@Q;?3?K4o97+O7BwM z#rd#i)_M@-l{>(O^Z1|V0U;e%8=($rTjC~iJ%a4{HlDTR`I@T+wW3N(*T&t9}t-?moi3Rv`P9krdLKz2)r4#BEqei(Dj>y z9#~DTa@kGF1i;bF4R)tdK87;Xy1SucTd%D67>T+9gYd+r0-iSztCk(%;PtaXItx_g zkbWdETq+8Kd_w7KoT^Mrv2?iH_k8v0`Q5{V5wr3U`+KYBCN*w1P>N@ZGsjY@!x91? z{gt!xON$>YIFsR{lm=SwFlVH`O_*}sj~Y6A>LRC(1ZozVHPQl6a@Ocw?0ma8m)_@% zDE+pBq;;xYx-aP#h0JN*lH-mX(~7R6J5|dKu@_(N>%f|Id3l#sOb@n=>sROvPOjw1 zH?3!{wwI6lk&V;%1CUFlo~-$wCa_vwLBVr~f+570O?7_FsVM3*N`(jvXf1yMe_KDK zgKV6~`*2?Idzv&hh;$PfK)6%^&Pew*^$kp={!TJ}#>t8A@}{xYcM z#fbP;IkF}T1g(CC){;AEG=K|rExUd?=gKnv%BAn-ku&lG3GSh9KMaf-u`Y&uN{Wf^ z(D|lwL(UGIRA_6Nl3%_fGZM9%I$HXXoqg+pm{o!8F7oPV_6gnu5S+jhVjC6wygXH3 z=E=oqpXQ5aL@St39tHx5?iWkrxAMguS>sF=JJHUCnZ5Zy$Eibhu%iI+?nyf zrm8&-Xx|fDh?ZRnN+_-!Oc#hhuf}GFlLe}}=waYc)36v>Uloz~6%BeoelN>ejG=e_ zr6$M)%ic9O#%OwsBvxkiU;-rj*icwtL*aT`|F~~?ZnuPYwbRMOS0QVxp!spjOqhvX zwd2q|p3zHgdV2N`PiGP}s@T7DMW#dFTe4y`60)aQ6{tN!aV>1mByT)5>NjnXF}rLW z($Nq)G#@GvO#^B6WqU*myk3pf*mmmXiB@?MmYKL77c}ias_gZH_CmDMp5`cRSmjK^ zXfC^egYV0s=#vKlAyTerHQB=d8B$<*gyVSeE!hFgi8!IN*#_Nsn` z!OE5br$<9Ne{gPbZA$)gY{;);y;X+2{S*6f`Pgc?4?&bfIVz`uor`NuVP^?j^8tLl>F^Kuv?N;;jM z26(!O;whQXcAdgj$6uZt%y zE`$gMxEA@zhIG;W*lIV-@rKj&7?`nLs5+0fOAeu?oTB^f#H^PCN+s-zq@{{0$;!Y> zKK|L2u(vRmWShm8&=wSegOn1NF;pBU}!(ip9|NNVVDa^CF zhY#O=l#xXzouM#R4uSs<_TDS1$t?c+)p3wfM8|?klTk;JuJn$IfP!>FC;}=VB@_ih zq^pcFf`C#bbb&xZij)KhB&ZD1L0SR<66uf-LJJ{;z#C@%=RNDaJa^~f-B(#FSy@lA z_kQ-Xzu)igv)yKG0$@i2A5`5*0;0&@QF^rs3LeEb-X{JQk{tn8>Lb1LQ^U&D+&yw} z7^(*PfLrPThTX0WSN;gk_YT*fYv1ILwRN;PREQh({6O@KWw?qVuXfm?$y($ye%xO*R78iwG)rs|degN(Sku1e|#iKwdJjz=ltUGdq;*9qzxneJF1| zuyX=ump+dfA`Kh>2h1D~uB@)}o9aud^#eg~OJD(EFKR%qvv#*?&IVKDUE{CHyWjAr zAqCjD-LV(SDhF*gwYo4CJRXTS+6DXtl1wdw1vJJ=)ZF*}YK#B*EorF6`;`DrG*s&* zd1Wi1!f(vcJYdAB1E!vwOLT%q9nBc3efvtk(X&$VN9y1czX{kxN+4)*1b0+vD;D9n zbl1LgT7R}2{bRhf602n3deHW*|L;?>Ah+bK?%jJ9WTsISljw$%d*kN z+K0P#C~Cclt39N$Li6U^XSQo#;z3Zgy7yE7Y7~kHF%ghI##i03zU$xQpfw>$o0(2S zwU1uCGh<<}RyA!gWuvYq+LuqG)zI|O@ZR9vx=^@ znjTgg*k2yM(Dq9}o<3IS9fJPip~05RxQIhNHjXL96DZIpz)bjkQCA2cz@{OqyP*6E zNE5UU6QuyfVOesM=B|XB_M~z@9;K%fBVspQ+HU;PeVGJs$(b(Mv;`x6yB{XBETpI9 z>kM;ddX}E@Txyno8a#rJ|I`&y+j9mcVzsDfWc(TyvzuA{E@r5~1iQJcU~r~>tY>z6 zjqS6sSc~mclJDPrH{n7I%b7#nvoEI-&YYg9?0lsjvqdd;$;X*Vo>d&o89ac1Ncs;@RO_nxuxV&#yE5t*C>gcmhA z7{#bLCXw|>tdT6SE>Z>h5fJRRa10jL;Rr;DC1qc0ZZen5QX#!rlDN`(NACKcb|^h8 zud-g4>lBVlA+#(@ zwh-JMqe0H{pMrQO)O4Fk_cq(6J|J077KkVt5)YaOQQhAj6f&njBbw$-*q?lv5-}{O z?NE>b_0I(+E^0csrTrpJ=u%&8g|O47cXFT`Lfq8CmTBe z@z%ix>+gs;*a3clQ=MHGnPqz~;w_!7nD7h4hq=?=M=0tmR~a@nYwmH?^y~QKEx#IE zp{$hpY;ynRe4y#?mx3bsYc~VaUSU<{UsUFqQ|Io##s(>SSYL-c&(4zej*=`ksk?J3OUQ}D$PH@N1Ac=`9MtRGv*ky!8LjKaxj6Lw} zso|Q}h24$z*phEoX9IpDD&|f_f*m((4|;EQVl==#2Tk(T9|RLt6R9z)2eGLq0JFP+ z(0WbsU>6Eje>W;n6ueI0ELJrJ+m31be4#(m0u67as>d!`37Km3^Es&w>rXw%?Tb0- z#6ilT%<2RUl13dBmB1ppOk#On2)$}6PQkF+#%@L+0(Tg+&@Rbdh=(v<872dO1t=97 z_wHC1{R|b6i+`;r=zzmYG+Q}mdM&um(Agjp7>*i6>$c_ejT0;YDQq*yB7$@=p|76= zP#E@F@!sw;&_cLAuJ>HEv*bm-G}m8GJ$s(&>L=UZYSArk)&3L*yeIAmw zamRT^G+$@429|y_XB$f~m{Gfdcz-9ED{rDq3-*LSJ~5cq#w0J1MDnZ_wb+bBxRo4J zBPf(*EKYh2cHWcmqxMP(wbqf`AT*So=`qKLZVj=!0@-ZLc~U^l5wy4y`!%dmmju)H z-jkH>VQ-iGb4ADB#un(+~xXPX}2fhBlpT*AHIsP zPbH~-RIBw0eHo5)g4qcnfSm6~MOTb2J+;)~hFj)oI~I;dL3fli0T;7GtN?q&m@p;^QV|vM7a|eIXcQ8! z=3QZA9F$9m`RqTBXClz39|Z())$PMweSKyP!lcSi6lBjBuER^jh82XG^}x8_zcW1u z9>cb%Kl}p6@8&t8HC-d{N8`$lHGVx`bnx=>P*Pn%B^qUSW{P#WvCJjPUdykO%woXW zsDrp2m$tg=C6OBosGB9uU5){^*q+sb>a%|AYLx1)Zx%{}m?_7qM2WgwI)1<-WJYypU99R2a&Ffeya!mZN#6EpxS9=CQxog8kmg``=Fi z>*xYnjY758IlR2=AX<%>l4wg=zn~B`ZhCD`$EO zty!4c@~fF+bA3awSLPav&#RRQz8|6Wp_6+a$Ls=lL5UFk`?<|`LrG%h#jEs!Q^?<& zzm%A2kA*$t9VKjRq~jT1+t@3iEPuD493N``r6K(*?dw~2g*TUMPzrn`iFzn=*;F`J z!=p7KMflcN|AI473)tyXk{x}lmDj(^0mb3qG)yxT8}#g2p5_~Mo5DBC*L9;fu{lzE z!2?V$lk?J;9HM)fjw@EH4fa>op<(p1jKsCI3|G5~3HajLkt4u)$K=!zk7g1o?DK=@ zJ7Mp5FXQK-T~*wz%E9+1BexgJH%Jxp?3LtmaKP>QcPXC0DxU^Jo_~RVz+sI5nyqF0 z4j>cn)D?ro@~`SuPGjrQ)3{Qd1vGUWwWqENWjkjDAAyQ;m%;!`-gA8ZB_U zp5NgZtkt^nL$dr+PR7b^Hrbrp@LSvpS#Y0}JD1|nvJwx`*t#N9_*6(|PibgazHV!U z8+w+@xv|~8FycNB7Rl|oIu?8ZIc;0f6q5qp+Lmj$*JAAb=#u20*RK5&gLXSwgKe3L zMO~paebQUzrFup>(9m*VEa0qn$3`&TRZul6$V@@@RfVV5x44zhLW&%fsPL;tJ}jU7 zq70T-M%&ulEuDJ&$sx1GF)GoZX1DOjJ70L|9go@NJd}yJ$Db&rD_)>dv4Tw)uG_VmV}!}_~Z03IrOa;A;*^>dD9J@ zHTNtJ=Ofi5+dAE|Fk+0eAPbnuq;1cz;$nq@e1YwBn}QGTv1RTJR}o-o*M;-28Pgv1 zpGb=h(gGxm^%;jAFm8Q4HnVf%h4u5(`DB$|9WVEFLD9yzGf0Z19mlTUI@T(KzB)Y@ zZLQ04;t7u^)NE{?K0%*go$ER^Xy+r^Y}Gd&+HgD7cCyvQ9=U;hWn31BLpq@m`1roq z4x>MACFh#xxR;vOl&kz8nsaWYGS%+mTBrpbZM<22de|@^0n5FMqr~JS_8!Z?Svp;?d*! z)v3V`S6Ip%5AW;Ou3f!->()tg^F*L!V5YzSegE?`(~Gx=M>i^gb}+PqeR;55rX@Y> zD;poUHR?~he)}vB^J`7-hu-E>ryzPUrOS@@}5Iw?<3WZmK1z!yu88WQ-J%MxhENVgW=!>l3ni&%0b&I zdgl4dQ5_dzbV4znjdtqwQHi?jpxF_kyd^&ze^iP;6DN?i}KHz4L*#BP~$=ebuegZa;>(uJJ~FL0G)9 z&6y>aaxv!=&te>&`H}(N{i2*0Mq=yemf%SKU+V;%#e!2pf0-(1f2lC2EN3KOc_)Nc z%+`b7#wejk z*x3eCBKe7r+;A14S;;EdMf-SKgOy%g03Z`|rqME|u?~(zx(61HoBXw+L zUp9Oy$uTr;*{iDAAv4*&3B`CR7nUwhy8)KD*`C7{L zG#X9{jw`LBNusofP_#r}J6J1zJ1-LL$y=hRvV;wI+r9*Y?aPGgbb~T62RT@TO7epE z{IdVCLBDucy$d5=xDkQM@S5_5Cyy|OVAr(T12pv<&!Gl+T1HKnIJ;<0%}}FX20~JZMWOf z^pMyx{C2u#6q3r@3Y~=-dtcY?^Gz8TP!I&-hMGp#4X$|m0~igl9|+(NM5pIB9rv`| z*oAFjgNrGi-tZsRg|P_iXmhw#vcJ)mzS{r>KK;S6ReWrNUX!|jcU>Mxh8V%L+IsCD zHQWoQ{l=Em{<7*GqIgOQgIis`+_apKx-l0eqtiQ9@-W2U?3DQgQ1>|3Rha)K!k^8 zh|XP`;uOdeMZkTE}y4I)^Bwo+K2^?(6qyy&0EmK@Kh<91Qx1+WY@c;dlD)3%hu zI6E48Igx+Ra;(C72SZjga^Ia4mBz%RZ{t9SFNg<9uJt$7<`sWb_wddXjNI{g07*sb zm8}+wD1ZO?TmC?CStYe0bWB(D0`jL3SmUZWp>F~C_a8=LPXb6gvyu)M;?jc7k5Kv@ z1w7g&<8!pFimY?n3Wn_w4>m!JW%*G=4Vww1A!@DYh8w?#g0hhpvpq`Er{lepN6T)| ztN^dM3l~=}yu2Y1%PYZ8f4b!ll`8piz=O>D@^iZK@58I~uz{O|t?$>8rADlXy`0R8 zw_AdmZufZJ1^_bPLP!m1SJE?Iu%Z8tDgb6kD zt$@78mu~B0o;mdnsDusX)_Ad5r4VAIgHlR+p=IYd5h!*z{;?fY{$jU5jXDIgd5$cv zt?y`=<~go)4J=i2$e9Ol^n4~&^LyJ33)`Zvqv2nM=Olke{!{vVcy`&oU^?ROX({#N z=>C-MU&sybto=SY^=)^psYPqm}|6yZ>d1^bI*rAWR?g$fppaL=_vhtx9rb< zp_!%eK61~5C zoYZ7GackUV_^)wZKzYP7y@{vhu6+W^l0aJ9yR@I1Kd^Iosng08GwaG}q}M~1`z?AN zryyp*87w2sDvFiV|{|i3)Kafyg9zymDg%8MnWDgpV{?QOB@VRifrRMv){wV{lx%lXr*(!b!u;y)1Np!J+MCZ>O z&U}XNj))8>ee@HqC1|Mq!n1OTJV1s%;%{?jkS*kvo4n>OJbj|DiYR)PH+1@ zfp+(%gjZH`>UpqP$NDTjrdq)HnP`X^0~gg(2DgAia-j@I^6runf?X?}WFm}XJ!L_N zTJD@|#2TkQl^1-!Q8m$fePd5yY4fP1B>z=V)N&|O8T;I2-x@tY-5){PRRSE`iDoF0 zFso5;SPSHbBg$~%!=*H~c+W=_pD5+4T6sk4-7@NS#rP-jguSt?4N&z-;TSGc+mhyR zsgg-sHC8LZG~YJ9eMW-*@%F3P;IL?u>p));M8@A9Jv=B9CtMQuo>$)p`$IfG`EdL% z@vlx`g@v~Htta_G;jZYc?uk#jR&x6nw4?O@njv?|X#z83%*VDdMRa!FkE+g*4IJ?( zyUN7NT^t&G-lTXH1=VmCI&vs%F-NweI+)-nmQd*yuWMPLZ7;{~C4D9aW;D}%m{o0v zdk-pr--e7l`|vt0RgJfqRu|A5_gI_D%DUF)^40E0Usk|+OiVqfWk84)0Z3gx4yjG|U>av>67&}vV=5m}&--oI(Z0y%R%g%1W1N(OU zC2WdD*R%ZX{b9!@R})1rb;`nxC>K2v`o}A85Y~JCg4po3{0(J0qAit5?NnBgqGP)O@Q7WJvKc)b^S1V(~CQ~os5)v}AyR37YZ1=V_cWJ-LO(C{HCqQ+{0fE4dzDW2|j50DwA0_ABh z?BCJ2tNyQ}htjqO9gQ9yDz`}lRgU~F0}sOBV51J+^7btxH?eaL=qokzeyh+PO08df zwIHc~>B@sfN0lELqJ9)&c={US)v&hQ0DJI8DEM_2idwmB93@X_E4uEH>xjN@Klp2| zqc=t4GbBog%Tu^o>R?d^fO}SYNoRiDCD$L~gtTfbR(vJ6bdejR56cLRtg+XdED>tk zaEracRPlOprt}X+pHcai7$a&)R+neyiF%1w`P;vx`1IipbP62TC59URJ8x$ zN%%5hW~jkqPi(nQm3lZylvq$oJe_uZ=wWy^^CiSX0sl@_h1P6aDd1j)j&V<6xteQBC%@ zm^g;;8v*P-s9;SHSMpiO@jo?7{M8HHPAczfE=q+d58!*oq-#|w)5{q0c`?NpV1Ks=_Fdi%E8EaE$-msmUgpuRk!PHWdp;eC8qBb@ zDLxo)Wm{jD*z)hfdStn7S3rUM`RmCd(!H;g?3kOqzo>9sRmDh%2EFL;k>=Q(qa`kW zGk+(A4PWtrM{)!@yo(ps#Q}I4xvt!Jx18-er7Se{5KHk|TLqTR+iU)y^=VAuO?TI@ z!#Z<~V}L+A6L7M^{av5YOl-_sQ^IDJyA(Ui{W)91V2yqv#L=Ilc356Vb9{n%P48SZ zTue`7cw>mMv7C#c=g%+On18k{)64el%u)pw4s^34`CSe2s$2wz3uH|4SOZ*wofjN6 zl)-8Sx?`PN_2w3t!Sj{%Bw)O9!>zrB`ABf^8Q8dVl7;|#T5{YvA6K5eFl2%0zYK9N z!Py=j&N}C}x~5TGpO^;(ZI_o|{ez2tIqgCxH7*at1vTDQYC(3o8JS?>3<1M)p3=d& zIHiw>RnUp{0Fhz8%RxU{I8=1{CwgrODaS?z2Vvfi(bNK5-E&H==UTOGs{m_kk~S5k zD^<#avdSahyM7J#hUY93=YtF)SY_tAk7xE)UHR)|DAB+*Rv>qdO+Xfx6|C*+v9~SS zqKn>2u1V1rc7{SnS|uo&_rtpmT5c_c3exK36gw|KH18rl;3nv`x-T*}SQ2g8E4D4n z=su}MM}t%VVMUB9`#1dq|DNOX!q}laT)w0GLmB>lWyqnSi;EARiOW@mdVrJG2cfU+ z)#u7vJ2C2AUJ%+h)%si2w`1H+#N~fYA2+K5^xeswLs3f&8pC~q{3n~|;_I6p7G`0b z;ALGve=b6_QxTr^RpqX9U%jJ&eTutzE64WP++%3<8C-pASwclvYo)hbOQrFew^OoqEF3Wwh z*r|8n$7lO(|DS#>8$V*m*EGKrzF~@jqYEp_Ftb9Lm0^aU_nNebYmXMfI*p4 z@_TCuqifj5%U7MFcffNijIhljqVDu7M%a1;%KI|_)bdF~Rfn2lcxx5EvCSCP9=8_H z&GMzp9a>8Ym>Wq*IwLuAnfCK8nAPu&p3*Um!!G==lm+`?ifB=L|CX7j?CW6%jvtKe zNYtG7i*kM$eL5Y`9KgeI)v!03?UE@Ra@jdi`*hC}TZaGmZhUASMuu1~`yHwe#E(N+4yB*3vz-Ycxv9^(GzzQEi($&O_9eRJyQysEo&K4 z*0D28nXauXb?WUpH!NAcfEK>cpU*M+RBl*sF}=0lsmjAy_(W+^vxIDGM~%Et!kfle z=Z83LT|NBl^616%>6fY2QQ&}xEk)B-E&DrnUQC;qXF5OLti3RY>~MF~}o5pJ1& zTxdG>#u54qu-P#Bb+uYz-Vp*$Q3?}fFvg>dc&Csv69rt9v5*<*d%5NRL|)+E%haJv zKfmV_QD8Dn9d=70H?HrRv4^J)p+~(_JiRuXyu#9#@v**=WY5O0K*F26a`dVhsqSCf zXeZ`>gkqjRD1Nao6vN)yrX21&HVm(*H~o6?Lt<*OBVgGDvc;9$`Q?{0GJb=-ff3as zOiCjJ^NA8>^A3K~D1~<~lX%kn@85oq*g1*88PBij@6Mke3i|RJ|9b2@*v@s+bU_Fq znEKpqo)cL1&_{aHQx!Dvmlk_P!Nb?=rEUJ0Ma_k0Rs5xu%4CAS03+~2QolSR&$(&C%%Uzbsyn0^S!6K-Sxj~FHd1w^Ws z^y>_bHK3L~RO+>}DmmR>f5w8&N1qX+t^C*wUl=hdFN}r0+4NQEI+>v8_+he{NN8)V zY3@zBv?`h_9of@65$U%eUJi%MXQ}F9G_{==h}yvHc~O6X?nx4rM;NUAJ6;d`WEuba z1{D${nut;K?O;-4{9D=cR^DgeH z3I$=_XsaZl{xs$yT%hoS&;&=wcu0Iu{hFQIGwyE_VbfsxnW!DJYsCOrlk=k0E_ME+ z_yFhpT+bR`4@#t1=1|ATA69{qJ0btnrKZ|et;(f@+LmBl?ErouZ-&A%OUwNN1No=a zi~WZbO;gL=XiDLAJ<|3e3T0QN!Q3_CRuI3M0~W~s^5|K{JiVZNA= z-_4?IDk$KEBISGv+<5T3hW~`4+@sh;D}N+T^s<41Zdz(TFnKI2Olgo9k+x${f;eP+ zd5Bu&?h`e*P-Fxg9820n=9Y*xc8QToOAd4VV-`%SnjcmUes4{}8es09Ux_5=P7dC}*T+Avt)$*P8CwldosN zAhUkFsg+`jtKUSO5_PG5nr~hm?mt+-Hyd*(_j z_G1P7VN}FB#%+^jG}xuy(D>y&lmP2&wI*Wy-lJC+MRQ$p>bvUg%^bu7EZ8kGTzU1; z;dP{fI?~KuTomA9_zb72sHw4Z;Uez_wDu_>k^akY6~Nf}XgIyi#MQed0kpy` zS6HnNzVCwIPS45FRBpx`E`$s6{%IGT4sHf0jeRVB=LV#6+E`N)wl`W;sx#ATuCJh{gth@gZu1Vl-R=RFB#n9))u3%|r1uG&99!88?Fp zpjiKs%jkbYa0hnP_vMZkM!i~AmxFYG$r6A0GT!w|+*pew+=$49YP<^(o`m}$s_uO~ z!emdyp&b&wi)PftV4w6BRI(Ra6Rm=f3TT3@(x+dm*f4`&eXdMc%2=0Ks2 zIlsKRJyaQ`Ahi1->C~G8`C$GbyzfmjlM1_}bKPWQD+nO=du74=_$OhrjSqV_n)&C4 zKDXHzg!!plG2N06oUrS0`TW59Q9jtOd0UKM_QuVM>~?O$(e7jIqt@F!9|=y4iHb*$ z{RZTr^JBgFahBvk%#SO4J-Kf-#bp9k_V-tr^4EC^f2iLwXw*#q>VRN1^KV5dEF~_6 z6bGFrxuXuJ4CxTkz2KdLZ64N+R>=TE!?*MsMc7yG9LoY-P(q+O_|&-;+P~YRxU8?s ziv9vFfYseAI*Sw!uaJp*Tf6?1eJ1M-xG%XP*_PXyzuaZz?oa*a;-D zum{x==esg-&39s7PWqD+XKl6~xY{C-OVPv7K-Fzw_^k)8rY^^itL001n8{nLhy8(Z z06Rhox9+rU-#$UD9!BR8^aK^XB_B&o&EFjl$2y+%R=8a5Kop3F2-}@WW?e4eeR}0i z+R;(zv9l85l^I)ixfkd*#M)lQ;oBF6!Cc4^-ZO|U%`0Vd`>?V({JHtCu@V&UVL z+d)_e;{rfDCUcV|6W6U{o*S3=tXahN4;X;GsR%l90wmI#2I62adc{aCvwQ#m+b2(35p-zE+6I%|D@9P;Tpd*ae z^Y^6dD0YOsUdc#iO-Cn6GfF~Qs&cD_ynQ0D4P#Z1vKNXp&o?klC9Dz8mWoACq>kd~ zUu8W=K7*tRJeA1Z7M9c2zI*E+Q5Ox8*}t|IdlLWZCV_n+1oq_lp0TWHzo!b61{ayw zH7sr>LSnb5n!hOE9A#x;MvLGndo1OedP=CkbN_3!t2U%nH95b@p~0K|Z6VI);lqjm z?6CP*bZv6|_Q zK*6qKtx|RqOyzTH!@q}>Wm@z=v6=8o9%5fRbO~k_-1AE=np}&(-ed*AMLGEhPIvOX)5=p8U@-h z26^%;Uvw=!YWh|wZ|M_y4`|J5=D~5QxAxkoF)v1KNim0Z18F@lj=S8EV&G!MT>#=2 zyF0D!9_$+8Sw#$ibM)*T#TNr*#=Zw{|8euwskEDstlR(^E8xhVXH0Z1b;d-A=0wct zgg%+e>k8e}>f`nWrXsuBpN)CnO!cwqwvdnV{-&(wQ-_8xPa4frg-|&wYc*@sL600J z2sqnl)Nn0(hr7G<^q;Td4@M(QB}pp1*?Syg?(XZl((rE=Mu~0Tqq&C)+aW4VaubmA znT@+E>CsH#=I$$GgZBdmFRO;%WqsR)7~?0eeIB4XUY2k_>&^oLkN zBRIv$7u1_(Rz8<)#B(NcYG^Z`l2p1f)0ev_S?=OGO>zG6ow~R|ibJ6@XW~68dOeD} zDs*n1u2)`;?|XktW=L`G4Ts8+}_s~iR|(-_@yLO1Mm>f3mvHShieI@{4AZq2=P z#dL@PF`Wn7m>=LqaUO;{Jw~%sGyH5(d|R3KYHicHabd5JmVQBg8>dsOc_)^*%@+x2 zRT{L@d>Zy$ba5DPxI!tHjBcN8=075CG1o&EQJnIzpC_HeXHTr{5xJH3F(Yyb%n{5q zS1@?D<^`okUo7130ch`*s;(xT4I7sC*nLWmWacfq9ct7H&dXIm7eZ$h9KE?sQK75D zkn&=5o}sB37Ow0Y5YUTYg_p3 z(g@?TXwbbrdXP$D^&et~4tsN!#d3Hnc}P&8(h}{J{&jC>dDG?e4>7ojmN~528n!Ra zfZP+%@yv&KBiL~9=a5SN2bs9(N-iT$^z{W4oK`ERkIK=jF@cy#)kGkv=s8t#RzkTOSvrxR48Zb%tdI zQ9jwluhVIyhG0oX*4($?7@czy*Oe;CWN&ubB6n1)Ic+`ILjVHH!q4ik^gKF&u@RPM zk>l@^B}sFWW0+o9!}Zn&n_mzqObj%}td~Dt7s8$qmmV8&0%p&q8l)NJaeAV;C+ZBI z?bu^VWb38v>%T5skNfZk^qA!JIdV6JE;|VdWf0S;7?peC$2#HG}=1 zPiaeNlFQJbhKAypJw|l{vB9$eg}suiDOM2IQ5($+-ODzbP*r2lHJ@;I64nNT?2P{15E>?Z8~s`$GgB7ap#lDQuq76T(Il@!#hVi_U@dL zO9qKFr@ysAe+Rw3@b-^rHnLTmK(-RsLt6W9Ge08O>(xkj=*%;Yp=V87(3sCmQGxYF zFh-W@Vh2q`&qC>)85y;uWeuu&%QX=C6Iv$CBivZx4Xbd%loMh5>+)=-adlt8#2{{F za=furhpl#Xo`_Fds^3#y?AMrzN-7&HFOA+huCs&;UBkDW=(IJH$#*->*M(?( z@Tk=L5~SHV5tYvAT#9NOrKjOh=Z*tgGIx(pvJU0GHtN<(9luc~d3Ltb$SseZ+>-;@ z+fY=}@BbWc)yIn48+)*u;4!bpdLGyty{@?+fJ&%-z>t^yD^^S!A7~G5_3X_&FuAo?K(y2_bS`Isn6$*BhI6 z#~ws~)l)6?Ty$1PTXR1G=gQ~zu{ zJTbp(_i3zQ#5U2HxYmK^3%Xw4NU+pitB|S!L9>+ax4gkd)Rx8J7`tBW_Bn4I}Pd#KF)3Q67@LNtRU=I^rQ2!U!1w$%8d#*O^?G!in)a# zOuf2VHj43J6#UrSLL_xT_w|+6-0E)|GvZ3uMlZ_deU3vYDAcqVMtM6q^912wHXiLE zzH|BwEB21*rgG0WlM_!mC_Nq9ZK0z>nwHN!H z>v{r+)dSu3Dg@?dkYz$2zS&qp3J%HpI;Pr4I3C-B)}haywsUmXrW#v!7JFI@3{>k5 z!c>BcZn<6Ypk#*SRSu-3^@fg=@ujj1M;D#Lx@<8d!!RG^)mxFw0 z%ikKRHVbW3eOP#CourkQmS4vjcE|IA5y)%Sfn#%u41{V;Lu_cLzi_E_gt1F!V_6h{ zN9q~?-7QoPs$iTyx%c>o=Xim*bEYDJi)nbgjmX%PeDAhBT#ED>!-(`S=H{o?iG?+^ zmG61{;=L~Hpd$m=RB1Hcr#nrU&2~h(tY9t1uFGg);K&KRQ855-SaaQ zNZu3Mq7lyrN)`Q8zV2#ux@D7wo_wpP=7ccworyti%gu35zO$Om{1e`FEL4j|JpB6Y z8!l^(Qu)MZ>8}rRD!i!6*?Vk?nGJa;rTg>AiR!S)4E-iw@ZsYZK2kLRqp(l+$L7XY zYGh`16oRZ57fRMASg{6soDX$g=rY(l|gVy-r_Rgf5Z z?lg6)KyZhm^+wQm%}slvn2zHyt|9AU=Vk{B^;A-|a4-ZcG$X>2lRYbG6xSIZyBgoL zUjOzrWJILIEcF`?|InUKsihTS-CSGdy5Ye6`DBz|_0QEUOkyq25T4 zY4SMCM%+h4&3-v_qJ5>{%INgpr)#1Lv%2$n&t1%nU|#)Gk*{UjXj*oEp)e}ws9iGQVJqh?_Dp;Q#>e5S$XmqTj!;M5GP`jZIb znE7p=&*2lWT3oXf&cSKWmx@VG7L4j1PPr)yk~V(HVx`&PR_v4!v?O<38Z z81&u*AjiX(;jX6Ga(L*;IGP8;uM~0DVP22i{I)ljb3{{V*{-Z8^<0ZiJ6p%JtRBhr zp9Xa^_^7$E@RfS0h$-=izD2V#*rz{5E3>^8zmtwlFuld?ws6BED>loqPfa2@^i2A; zP{Z=~#+p*J&V+w~-2yDgjSi)(4e_$kw9h(9mVLpBJAWT(6aZe7YGj}pdh>h#c$bx4vh`jNGoDsi zJ^fF9&HS>SPqr;V&1*bGoLX`z=5T8J@s@%ZFV2dzu1w9~!mUx&zX_l4nx`R)0W@$x zbMN7cFrF$*A${uKckllCfeAntzT|TBP>FBe6_WC+U}(jDuI~H z0!8O4Sj`=CZ*cfRzmEA1Rm3ni-F>g)zB3KrIqw0F40B&yW7-Yi3>jLrUO#)yym>FJ zRb&Uze$#o;yN6ia9XD#5%g>t4gL+!F|wQPqKaE2i>`94h- z3mcX`ltT92VU~6fn`3>=1{kAxS?3LXRSt7g|59TLJ#!ndzLsp=q#|1oZq;kRg4Na% zZ9JC*I@m7n$oRn*%HE?vI~C~M(9ND8z2i#(R8vd$RT5`rsRUv@JByH3<+11}d{-O|3pU=HjH zdDFeoW`?^Ya+!~%_i^3jrRX(+k2mW^yxjn0sJ|RJUnIrG*UgHsj0_37=<1A_A~Hd1 zkB3gLo_-PJ=O1JaiU4mKE^S5APw%Pljx$F3k5Q(#@?vI`;mRNj&^^n@aD`|ShUTT< zNX9+!{zg?LRN$fpQnM_sB%_~ZKMJ{HxG{NRrj%c29RUI%wo`jtshnM@eLn7i119zZ zn~xjpB?T*E|7tQ!M=gkN-^-sY9Ms?N<}PMab7Q5AoEPkx|C}fC>>Hxk-=%hUgXiND zM3-GwX~EN-ubu1Be;Ox<-c6-r$(Yy61>-D!5{i?LGWv?%jAqa}zVr$A?G!CO8oJ#eCOq5CIV4Hps%B zE(sN(1)1B~I_D&!ZO6y_En4QbYtIn*89>MKwX&@CIxGwhm+MhNEp8ol(gx1Xioq*J z=-=xF7qc_?Kcb+`um6L5xOsBlh!eD;-~RVo`+;9UyY?@zQ1If+%l&wupe63J%J!Sd z|Ip@NT>6(nap1uJPrl}wpTdIRkW2T+=)J{+brk4qxRQYznDds~nQD~7#Dg_J6nz zI@I2M;jK^F zxgRL-p0TIBOJO9p0i~4udNXVOnKQltUiF#zU0t&-3|s5d(({@bj;pg4beJ1xH->^C z7>#9YPRA81_hbV~VK7~d;Y{o3TXL9+rGUz74F3qcrNVL-u#fMe+!W-msh$nlz})qm z8;67v*~7PaJ!&4GjkmH#>;K&2lws!dnhDAv$vr-6pPNvSBOq%u)fz;Ch#|9iOW-YA zo#?6e=9K?uWL!A3?ZfQEj`B0jydGfI6!G(k z4|JM!^^PHxqK{@j8L5}9nRrj-LXw+3cGz&;uQH1{Y!(m5i{8{fm?=wJD= z&RRyStrZ`&I1@K3{zhNu=7ovIeNA)au>b<{vy9pAx}NWP4hHdSmI9MLh!5R(kC&@+ zi?&^Mr(^*0cIK80>y>h~g6_H*hdy$%LehlsOQ%?jjhR8Ouu!QujbJGCQ7@OV&6pcF39&}vUTKE6#TC{Sr) zX}}}1XvASmLE#?no6q`P#zOR3Ag0S$Yv%@#re_2&{yv{qN05s;cCEuQ&d^98GhDtB zV>UNb)7v}Qn0()ayb09|Zts@UnuBDIf7DUXEOW&aM+|phda8KVcQN#}6hlz?j&ktc zrYIaada;nZX;$r4_hx*Hz?zYT7^PKb=jV&iV(ywX2WrefG11p(1dw;+u~8+NokA_I zsft^R?tp?U*!O@SUvu*=`!UoyHsU8{ezx-5cmXv^IyacW`NttEb7oZzI8#F-s!N(N zv)2v5R+ClUIUBj5>jcobCm7G(jxK~uy9v;$hZ5FREZby=F^Xn=GlX0iskI>HsXWlt z)02t}Pm$z4SFYdMR18M8$F}9=X-P%dY=as4xXr>N0WOXD>6m8yxcXRg$G{*<+6TSa z4RZcR{?(MbfVS2bmJL(u9=#YJrA~$3U7OD3#y_;~d*r&M#(~Y1x%NSru{_c@GOiO! z`4-E{P}y5MB%s9u6B{1v7mchAJrZ8>+-*Yv(rhF_h*`&kfaw%=_22^GHAkE(^Vxk2VP^$PROW~H|GwnUct4MHD8^$a`LhQwT`542l`64Y}gC2AfG zPmM=$GVV9?U=PCEkV9e=ItkrA#Czh^UBL6c!=l&XhGwe^qjhN86QzpoHB}|0RugXk zIpLg{Zl?jL!6x)0WzB2w6)&Ved2kR)6|DOSWggxZPbMNmul6|S%@s$@u!Y|(QW&Vr zvTE+?4tQ;PwCS015P_Ydf8En6D@eZYqixGzB~D)8YFh8Sdbs+oF=S$9R8F!f#y#|B zubhHX2lVxcS%f63@B6ax8l{C}35f8UqlN;4VxOBhb{FQ{v%k;*wG@>;=X4<_5;zw` z|G$RN*}1Bmuitc>owKr;SbId*QPx{_>U>n; zo}F^j>?9IZY3*rjOj7c2(r!zyX$o`LEV!=ieI+?!3(5#3Ph~nAvWoBLVzot;yhnMn zQ9f)G#M_p9{%zJA?3>O~_GN1wZT?Z-{@yt$;gRiu_tp2MjI`I!Dw%^o78fFY!KRky zckbM6j3j+}M+KF?lcZ{44}C8W;WsIQ0_aX;0%v5Yfp=V7qn>=4KNhD?5~y5C04EA4 zExYuJ5`$r9_|)OJ-o_6pNcTZ_%u>qEELz7JBeNI$If(0-6E?joQbr^0W>-eXUwV;IUK@ z5h!CshSXAv$fS%y2-ISTAq0dlh0&o(s{+c9Fh^xlMh%l8kf;NZY|Qau4qUQay=4{KV`5Yd z33Q!03JPbmq=L_T3tyJn- zqQ`q0^~;KjgJOqBP612Oy3{Sbrb|t=3r|SVwEW($c~2XTx2r`dL=3Gq&VcCRq*ycH zi8z|?@fo9oqs^$aDB`9OF`ir8Xc`|BdUh>ZeSHpNE=SPpmL8{akAx2W`9-T9-&3~W z6)VF#m9IUD0!oodBOAD*yT0|!o;LMxJ5qhEyLc!{fM4qX+r_?NzPVjwzYIW6xw_5I zER4m$^~hvC}b4Lr;NN*L1BsO`=nNA;;8p@Zs?oFV{<# z$`LC;sz1u@BrRc9wE-8B53r35GZRc&{J3wKWZRT|0&Fq4!YcA=&d(6!(PGG6qlmC5 zqEc;r=s-;0yPAdVG?%K*PD|%R$M50fWPE=67>|aqDrefAs#`6{<4B&RZlMhZV-z_a z7kXa^+pL)lw9pL2eCnz_4yFQQq^xfaYWKyY?DM#A!9(JttbC*we6}si4L#i10ZjCs zY_?UC<4wiSl-kv}KG(?<5_v5?$r46exvt6$mcK22uV27jALU@XT(-6Ty=&du{<`K^NAIhATtPzTfvPH)SMVoe;~`vYd!i}8FJ1o(nCt&hYJqDUZU!T3HND>9$O_o{`Nn1 zvHW>+fjNm|X~IwRVo|LTewkBKS#e)+B0~;s?7YreerP0^7>7R`*jygL{PoQ6pJqso zMzr|?gB?7ORU%G;^1jIV&Z=ep_m79W6r23B!zN7B>bBoo@fH6`)3C%TQ{i^s5pfMi z{X=MyMpyKptKHlo6p8ifIuqbXAlC7~)d8rvu21pJZz85{<2A(_-3YjAIAK~K5~&0CgImD;Y|7YL}ND;%Fn;?DsGDp3YS+xns1=#O3=?z zda*zU+!i1pNoZ$6DNfqcV5@m4$8e@@&{8O{k7b7KZBAdj6P(T?thS9Nyj=P^PGjQd z3%kg?aPP#!fN*|c@_f%00-V)FO631jsL}B-fiF61#N^U=nil$FDeVgH(70oB@3Y>8 zy9TL9$(hcCwcC=FR@NQ?3bNlQ8il}oKC;)Vl^oT7uqoaRjqdeLy6-z4sW?>In0{qN z*S?+3n9Ake?|B~_SX(=|H;q))(WyFCPkjzsTPvHI3L+r7;rebuW8IdcnF7RK3k+OtuFw5YI=hC;US7!?S>W=WVd8(5>1`yT=n?bPCb}!Cf z-dZypOo45#3-s0s{KoYZgk<*WPzWoZ;o*iJZEfdG_E5l1=u1(lH?I{#N-S07x}t5u zmMit`s$FMux%}`T7o3kgIqVsRL~|W)`sf#uzJIxrH{&94b!|G2884Km0lY1TLVW~_ zcXbO3pHcII6FHyr$K!^}5B7wY_^gA>eyWF3j2qS#lYv=I8UcE}uhSXG8wspyzYOff z|9PluPdIL)!rRCHMpHfY!(RvK6o_J0TKkBDVXn6JHcrOJ;rGo%rT)74;v)XIVe|ZY zNEr*W$1q{KYP}F@88h@WQs+a+6=+FW;@ULBvzvu1qnxb|aWDyhs+hs)<87mdnC!xP z{BzO&QVbjSFB#H?Mh}Vg@4Y*R{Bdp6N0()_tnxPZ8U0 z9twwNl4l4Ja#Pu6Ca2_}XPUF8g9;_v^lH2aMFu7~3byQiPf}czUSBHIqm$PE(OzHr zB!?m{E#2(V;7s6=7yFx24Npf0;X+fF=P_%1PN_yUQV__zTwErZ0Uz8Gw`UuYZxc=X z2;TnL6Qe2-fkPF}SZ2ZXA+r?tu!U+br!4|KR5IN6hkB+toNFpuO5r>?=m|D5P}8ac z8Nqpu2f+53?%Vc9LLwrpo*#dqAW#7cyr#%PM3_?7 z^&~^~Y|ZP`&6d08%wDwc?W2UL3wlk16Y6mU!nFU-8Nf-uYkq7q%ABa)_p4{>1$GAG zo8^GAmV(6LXH987P9p38d#rj zi@;h)V#`-lqoh|2JzU1-cVr*7gsj2kl(&YKdq3kYpH?hv@j9JI2O8E+1^U=Og^WMfiMpA&-*rgQ1arUQ?;!{${ep^zI|TS7zt}ndz;JrnW`dh5}sbr4-S! zKZ@Ahqx`^MOMzqM?Zcv-*_8&7zSnLFEE?C<9YywK+bQ&VufG-7S?&lMG>88NH9}CP zlfj%q#`}QWolQExZ-G`i!+$OOxXfq&s3Z^^fJ%nW zk2fwSGyM}=DX)qFn#WyqK%D7`iXI_0T~iL-fvw5`XzCWO^Zo_t!iRQcw10i{3ILEi zXnfnHd3xSXxg{L1b6LfTavKZG9~b0h6jp$@dmF13Mk!quO**Q72tQceV0YRwr`vyQ za=OWDJPdqg62cp(Yn0!u?%_rTQ_OOxPM0$S*VxHjMA#cYBCu1QSUk>c91we)1=0fAPq_O(HQM^;Jm>&D{{Cu@@wZR!!Sw4yUL za<~zj(IugS1{q`VrYE`-+MXU5=KH--K4vNrhmv5dm1fph4O*Bnyu;w z5WtCFn>tm~!i6SWsOUo+6`z6Io4!u$l)SZ=%#8*$LJCNNvT}HxT-|gzXxz|wk9PX+ za_PObwJ8FoTTXkmgW@d#(A_OcMP=tX=XMS#8l#xhnXcnkG&da2F%2nYG=50yuDwts z>#NU32QTj4_3e1{aTiOmNM z(LDI%%6>$I>*BO74&HV^q%)r>)~Rb_a0n@2xp0my~DB9TFjk zz~rsvk|%~eiwo^!kc-fEQ>UqoX;P|v&rH@~Nu*_V!bO(54o<)mSf<+I7JoCh%q0c8w2#t-ziXXfJ zVexY9V~@X?KM4#uJwu|$Xb`^x9`m{Z4R~LYvJX3*JAq`x-(Op6WovD&712>*!2!1# z^>L1T%_gv=+NlBMI$zzh`ihyYcP$0!13jtQcxcBj3#IMPGoZacRCXG^23IBPm-xc-cZLt^iVEiASkLi}Fav&#gpSXYP# zA#fP$wFDI?ooJ9PDcCqpNJcdGOc3jvwss^UiZ)QS7cI;RSa23@aY%mVhVABo0fY*qdGmS{#pGgKo2to z3J>pN?HwR=Kda&9WDvh^XWxu(R88_MU$lMyGBkg0`bK8`>e2H~srY%(jCtBgtu?Z9 zPqr?uJ5)hdE{JR3SL3h2AV_~t;u&xk=G{TVZambdI#~J8;Y~-^51w2uV*B206wHd=|y?x!1d^QFV=A>iu!dO}FFQcP2q9GrUZRYbz!f?-g8~Xl?tH zHn~!dKpDV7are;JINQU%t3Nt8mW!xQE9+0sAdx?w_|Hie$j@EVoQ1qJZXoGgsN)Y7LO(-L7?0)nRms;lW(SH)@?gT95g-x6= zcW!rteMBF#DYT?W+nw4P5L#f6I`3w;Sm`6a9j&x&#x-RefT4Hp_M;b2D)Smiw;C3S zM5t=Q&kzJ+xp^#-c>PHLX zkOr~kqJ5mGUL*3pvEdFQH`~aRZ+;Vt`Z1iMreQ7c);*;%@d!`-QFB$NkS-e7_uaXZ zDXWPW*)nh_Ewr)276cWIrmlW~+S|9ZhJS=Ixr~n=AIW!ale437Gk;ubp~d|GMRpLj zJA#!3=G-A#aabPsb~fCS8GgKEH?VhN~pKVAH(Im>I53ah8p=p5VnvL`0d#l`Z*CsI=n zT{Q0m4<_oYDvF!mFYC|AC|mUK)8kK>|2scFGXD5)tsT%4zkzOfP)j{r4diGD-XrD&Do8J4Uz`lb$h|H97Vv zgi(1;VSw>X&|#C%i)d@1nvYhcJv_%nrsVX;7#%CthX_(TF1UL9njNC3;A z80M3M-fV!@6DU~+9+bRVa__qA`I(@u??(k>6USe@`V2GVsZR146Y*Qaz0Hw5Geq&b z$s!Ok{3IvMD~cj3R&Ikpaiw~@oicMWvHKaFK*?75PJQCPK7y_dd z3;}XCkF2f0A9*A1=d0n2Ft<_P34E@o)_p=+AY0Xk5tB{wxA+PP2GXNoa3dC-+ zL&H6XozX{No9f<$!T|kT?1g(_K^>O+?`_rL%!ay0SyFhie)(1sd?LiV_;y$#wHLgh zUbTMOh9m(4UdOx50(5QmUY$4XnM02E1-XVHuQL)Rfr4I80DO|riimVgKA=}#;d$0n zh~Yud+z~}pTPiEa5`YzVqm{ZLC0AM@zuv=DCanK)EWOWZGUk_I>&W1uDic1Pj@|su z_H1UCXuGrZ)l55?`*gE@I)PNRIMdwwMJBB2D?^|0&eJ9V4Q|jdWGyLvSa46$PM$~E z@g5zts#LUrqStJ1_O3c~q+rbp%c_t^z1a;X?N{4Ev(H6p9v!v*H(*J5S;9*D82}@T zK}|ys;sRu=U+1&&GMf;@<@F$&x z0DEHgLVZINhDKQj(9TW{?>1~p4^_2jW4EyxP(|t78C{4k@aC?6?;lDrE|{sKH(MGT zn^IquB@Cv3B}JXQr5U^r5kO{k&EA^_*e>hO8CV8GqFa=Z9-KG^Ha9)g_BSf?7`U6A z>%mX1e>Xw+e@D>xUzCVjxO_>@Tkc_lySsLM^t}=lX|T&23ZO0_gknfg^Goteqyb^2$*-|fKxlxBxBaJ{vq4Tio8{1^B*1bPkVzF;2spQsIxhV5Mc zM^H%qpAgEWsjoY@U(BAUBNFWz8XBN(!%z$cbIA=#*)gsHp6sVNE4<8I@Mb={v5F@s z49o5(aa00dfB%HmooO-m119R!*||RsTBgZ2S6i7O#>U3W5h|8{LlBU#cbMSiV>KeR zlmb3<=nw*daP{%=sjaOo7X!o}KqGZv=hHW|r!)8KVuk5alCg;if9J#XSDzTD*E3~u zCZ#+lb-@tBv*#33xrn%NAVNK;>`7Jgl8#l4q`jIjQr+qAml?5Ad>h|A1k5+uRdAT2e!EOB>z{uI*4DR?Islm_I^F8w5%Y9ULx3nCD7)>rSEa9t z^9I>xbY6q0d8{1X2OoC6dHTk~<;i9^Fbz`tx%XWd6+JkEw;K@|r8zoMsAWbuooEIr znN#SM1PCpkHv8;Zcoilc;DGmV&Cj0Ui{mjLxuY16qP7&DktdKfQ*2 znwEZ{f}GR{EP4m?t*ri;<{-;xgj=zik@Frfq}?0pc3)ybRnHI7>m)MG@B4R!d<`sy z%dfUPeE2IX0Ol*zoNhD@EQ{Lf1ldL=r#F(?oodoQ-!4s-m)N&m@oPQNp<<~=-lp|0 za28b@V#m6RLLg&YFc@0;S=vEt=b?CNhmxav7Q(>tSP36e++quVXDD3&QPgPyOeFOF z>N=rw>rrVfZQRTy7DF3plyt-Y2l_*8dn4^;AfWSDgc0T#LkDX?3tu z#mOcNKT}lQop{j|=^Q?t7M6}48OL1jpK2-aJDiOcb}kR)HTS;x!Z_ss@oi@vC0DA9 zi>OU-I6;w%T$e}2+3D^X^1d4Te@Mwq$tg|_*ZgRt*_EN_Q^Vz%WrgkK2}yerg+~z_ zZ+xJS(c*g!v|Q^*qX&%hjh*C=JoL~rQdRUdPTrPmOW{=HhHId12-R_WhPqBtD2Pk8 zN3u6wFw4qD59pR4n9y82G#1HdA78j-=t(UJP5do6pbcz`n0jNG*VuK2Li*fRKV7hvp*~)iM)U^R!r^USC;g#{aW?&nEm#r|(``*TLToK*#t{fasd}OS~ z&W1R9XYaYFYB|ttxwr((v9_T$>@U(RZBD22E2opt%sAfeKte3kg`&zyNA*Z9*`7)I zH*Ut(FpGLOcIc&6wIe<{NR?zpj*7JfF&1X$vxokCZ}8ErhEqJ8y3vbC>c8J&4T7%` zdSjVs+OV0a_{mRKpWyV+*L$|kc#U>kkO=}P`J52VPmJgYcQ-fm4nZfsKk+)PLj>^u zvR`hK`s01Vr*EPK5TcWFLdJy<3vwtNJyRk3Y(&m=&GB2vPwYC;D{!>55_CDX&!l@z z^{nPO-j}*V&}o73CK_qz+b=5jDe z2t>lP;_0egV<>hy=DgEJgBu}g`?%~aD+F*3K@F{eIOVRRhp$t1OFi(#l+fhxwTgCL zt+AUAJL7jxht&564X0T-2zfjRwgMoTS1pX%Id(RKD_`?!ULM~I2Ny1*DqPblTIMSdV+m z*z_n0@=|f8pa|-+`LEPno&RjjiPXHmupg6(K`LA(GFl`v(KjwtQ<2o;_PCmAx{)?u zvljuNGyYS^H|@9w%giQDv)7ESRpYXYadaVW)9$Q}SVJJb{JtxB>r#%sSN0Qiul037 zw|4l-Ziq+DnQbG@#b~M?Q+?tgf6DU4=WDV#45hz-qB!r#>WXGKRr%6XAf;J5^=gq| zcjAx{Wve21qlUvJ8DOA$5={D4%+Mk?gOHJNu|a#R!0_c{IjNJ@@JplChCF|yUfj36}x>V#AD>F`N#OcLpzGdx>$OX^tt{D^J?0 z_ZKOWoY|tH=tTlY{co2XgR5uT?mOI+R@_Vcg%HVYAj;UiKI4hLPV!a*-T+wXV1QWz zBvqjWx|+Bv{*iKReao-bLs!Xmrh#un6uzc{85s#sy^2ZLUAN#sFX&qhEdfEu$Vm6J zG?f*wlLTB}>M^LSjdx`ftQBFZn!J1}>ZLqN-OOQt=5F*<-SL~wRKYpLU z;1#=CiHEVJYm^lKr^S#Ylv+a;S(|nO7WO5 zUi;F|A9X{UhM)VU$_69Tf%7U1l6(@DM@sFq*(G~3RQw^K^88O%wkE`doxi`omG74@ z{7jLE9Yi2Q3Oe35qORJQxZxr_<0;QDTj^nRUy5DVuYv-{HuF-7M_sIRxAeTEQ^vGe~wbvIb_tSdG8nJTjPN;)j+M+3-PU>x+!2(;J z)2oj9Gp&vh_)~WD2AARd0N*&%R!B*~!>R7o+|BPCUK!2`E(aAISDDy{>*AW+(t4-C zjq%;e;LT8k=B6{T@18e=af(5WgIq>s`ecPHLx^$lv;$ZN zqG~DETuL(sU{?AeU3*fZ@!Dj?&C0b)gsPzo*Z6j$6)MhQF+h%FCaB;4MpI=BO-7%J zB)w8Kb2Kss@1!)AEs8cEm&B~^>YT9F;JEZGQ34Qf0s?0) z`>t-a`nI3xyDyq)ej~5X_mjG5)G8l;$uGXDe?+(jU7w@pf$- zaSx2o$^MZXzMdfK(M~S~humb_j`BiD$bjJt&-nIoJxx@5?@K_q(l#S8$dHX6bLddr z1A_P2k2`j$5FqVvy>Q{eX%iEC=@g?<@!Y(sCFUAk`pG(H`?u4`WDVqwq&TV-+WnNb zAW`6Isu0dm9m|X{5NeCGl}nzC;k|PmuAR?8DM{(tZJYJ zc3e{(JhH1iNA989T>Yxy{odTWQoS-jUu=yED#~IVIHkeyEq+t%)Auc+n&1{5*mEl@ zt04m*^FbIc^oh=D1ATJwZ1_T%|7oKOQ@r*OyFP$JrZk0BtG!c(Z2ubS!l=CXS zk0@URB9WD2t0ZSmWU!M}==LlrcA8Hc(xk3=1-2Pa&L8SsSkhC(Zz;730^m%&%!GWe zqD1OPqA2^NY%n^#)E=J5{v~dMFs_M1Z70|`%CC>TRo^4RWTW?(a1k_5G%8g8_|Uc; zpXm`u4(C5nYR-*!WiIA-OTAD?XjI2K-)<35SuV6|qRqCus{maJ1)p-*iSk_JoS5tv zLhgNRU7zj{s`;Q0uQ1Dt64M1Z;t~_wACQq8<4**T6MzcxU>Kw2LFDjZIC4XE)3TwZPkLkpYmIk;K7Uyz}$gLvSaFV3h==7XMl(+c|zv#+NQ>0^^ zEIxNwrceZ?GW@8v2WqrJwk##%jkoN%8Jw6@z_VdgG+XIFc-9r_I%fgN*7WmE8!u0X zO!^zX!LJ4sHt9W1Oq)%!i)wljcvkiq;Mm|QIfEQ5$e=TAVDM<{s9ugk`%fC3a`;1f zBbpMgqmrmjM@O4jCpbKBxmjw|X%V{p0YVrqylrg08jOk0Sxujakxdf~h6bmEQB&!U zAZ@MVqxo@q!;ImX^z)S!4Rv7{l%`Xr!uMqkJAL16AA--_NjnY>r+d-TggVO{YJeSp z0vyT9ZIk@ox@-ME65oGibbaF0H5sFwTyVk-8#fjeZLmiEeM7lQQZ&9?vU%!=T3b=Y z)s!bk>;Me>CJMQ3k%Ls%Yk7w{o-)kb=N^9n;gTi&sLg(?ow2B_N6eUoDr81huO*>3 zGq3FWH--4x7{?wNYuyC-=3nPoROtjm=rJRmtxY zrNt|RQkm$1(WUbJdcNgW+L2yMZldDu)1npU(;`WQ33_ZPH%{nN%p^Zw-wr!1zJGUc zv>n0=+mm&AP&emH%Mp25i^9K(4^X!}0L1Rp4Rd2O6PgGE`j6{9Q-C8RtCN#qIgTOL zCty>pt*zBnRjupMOqaB|H>(ICW+gL+h5tdbqW6D6ockox|Xkf?u8(1hvDqcU&XX=B(``Bd$r=m=`pLzZO}i7<91awtG(-VgU`>{Ak{fmcIwyS`?n z#a#+ZPf8i&bZPzq7+dR7K)?8ORy1fnTxy5zz^d&Ge|^-~Z-k$2{U5tJeI1!^yV_h3 zp6BYn&s@7)EW%!2EM`nQ5sh)wDC+B`y8c01(Bkx9$>`;!ln-@v;;E1Z*=hmGPC5kt zYMK*Jv<0$V(A93Oj*PsJo*o=XQ(>I-Srgde@+zHi$7LcK#M!-4oib~GV=e*R>v4%(AUBRjnjfY>)yNT;UnKi>3<2sIAPMkN* zVlN5Z`LwvMEKj2fgE(!;cYYpHbSMMWCxy3GuYRg61wAtrI#Dci+rFl2JJp?xULG$- zJR}|c`Y5QCd#9v?P))9z3)}&Kg+ASX!@M^tOhm2dTFXkftIPhaFZTwCdih7iSJ4C? zfUjSitKW6WUUS1dZlbyRhy5ja495G|K+9+RCfUls`_EQ>42BHq~i$zTi1YaxmwRzOTtKrw&b;PELF(-ZJjD(8}k%ni)hZk5{e9 z6r(Mk(X>@;ZYOW{!7&0FK510+x1OJYbuslP!KhMX-ukzP(fDCZX z@DOmQhTLqB$?!*Gho`RRlntOK8W)Q`HJE}amB*#gHwK-hHj6kPNb{iCqFpkN;1G0G zO)E1EgfMeC?1@sr`~Z423KsZdvt4sQ3$6??NH1vc8oL&aLQ!)x(}h{P2SmlH0iWjQ zcA;I*>~e-pB6$q%zN3(G=BiIQeUU1Y9P%)ZJPd&0HakMbr+=!8jtVqijqR|Uh5-u9 z&h`I6$@uioOKu(E>Op0@{*hhZ=KT%5Ke%xdpPR2fqHc9e`17B@hN6$h0^ff57e!`|HogW%#3lKqHLn8GeG+^+sDIg7Sxi+&7lYnqpJ~>~GdgP9+&B`*P$e&N$JFwhG&S?_OJEFwxp=CCJ{t zA!$?XUPd8?siP6oEyweON&hw<(n;-TYr~#_5*$p+NGdM`l9m55ak}JV78Pnb?14l( zA2x$Rl2Wf-8~r?u8Q!$EZa44zG)0J=t0=OT-L6kL&-rPWCM}tPT~HbMR!8S(vOje> zMrMfXPFuC$i+5H%@S-RE1;J|x%8E$>qDhW9ayf$E5O^0I>D6k@1SBr+{Wknmq<@!SXz{fzg5)!+KLz= zo)~fu6-h@~TxvXKmaK!hMw=bAag23Sr}9c$9GXf=H}wyj_219#}&KhM=hYe+#8lZemml376btc#EkZ;O{rf}NOmrr zycQ*Y7#O=J#R*(8VjAr@cgq(WZ$tixF`a@@zxkcix%lEMV<7ULpUI z{iFp(>jLoz3M>%vm0{;J*`R;z5P#nMU(nkPRJD6ZJ~UyiVEN%7L2Y7U>PSIR`lSYFyFde|`$zS0@5V-evSVd6%J6*w2+znMe^OC2Pi z%7{y%{+CD3ncaiM5f!(mRkO;?@6P_9O7?|`?=KcfmgK9i zc?rhRS4;XqGmi(OPOtLQd@Rvd()R4r&DAfcLLjCJU$zIAxHXoQz8tNFkL1FL0<6L+ zQu)Vb>T?IAn}DR05@DFYlaG!)rq>VM11tUX&GZV&G8xs^=0(BVb>N!hh1uY=k$Ztx z9M755Og~l}X`~T)kNj|VPgVHh^w8udEJo@vfJ)@x`mGMv2tUm&vrw#~uRKaX;Zx2z z;pln7bkGFH{v-znGi?RLW1$0lEKkW%no;jchF&%PYa7cc!(qByuDds_)F-6^zU{a= zz#L&zJUfqUULu!>FD|}VouHiL*41tct8?OOY=z^JUz?p#) zAa-6so&Vy-1-@nE^rth)>w@59YD1Cetut{R0NFc<=fYeLORBD?rE3Ns`h>Qh&ghcS zrfp>9L(q~(-&y?NccKnGmy?cXl%2eOGcYWC8l7U+C1{%to#?5w7g7fp`Z}O`uQ}D$ z0=lUTY=ZMlK2;ZBM!j>W#4`Ej1^q&@wFgq43N$$nIIHc`+}Psv>;7fvSq$NVV$mYrDwxVKHb4MEgG3PYiBKE+=Pvydle@>oV3d{%)YVf7g)cC8`LYFVK3 z@;isq&dL5&tz7wUBstluT0j%&ujol7Au))3f;K4lAKMQSjml3|JL|@$}#zaM{7PMGuda) zrR-m3y)Lj39|;GjcV$*yj%N0Wp?F9%{)r?)=+$mkQsTnRXO=w%9czViJ<3XDCZPCw z%#?8B>%lb-Q^5C3gfxPGV7q)9l6Nq6RnlKywWX(G*_!o-Hg?*~Bu-OqD(|6h4$K9D z*LtQMQdkkHR@ME5H(kG0C#)Z^n=8CaPoY*2F;lsn$`_I}CyOTV+^hQZrAGHqmLC@; zo^ppW!AAJh-#x)|e_GQ>pu}MmXZXF{%GAjIz2S>(E)4E^z!CYkZ81H6DXxz=N)Lxf zQGxtB8u-%+aXcCZBq>Mf%j9;*eSl}fQ8nhepUN)Vb2$&#g_Mq;Fl2dU)+j0BGX~h9|KctUs{~ z1A`~h6%8O=KE8M;vGzMlCk5ao5@j<(=%%r1AgYx!5F#0gdRM(zbdKVbA~<(EEhWLN zUEoOQ{s365{r)SrX{OLvyRq+&nVzcXrl~Q>Qo&aTjjBaDmb<{ zZR&X^HE!j=uB1T@4+R(A4%4bp{`C#(gmF{7dmutV@$-80z0fH^3Um%m=@^&Lmd>Yn zhqjw#vA8s7EumXrUkz_B-aKY=R>cY;#MFru?m*vy{EpmrlZf}TV~6!YH)~V`9}bNN zB`3u&suB}eh{%q_I?rLYGod%C+mipTNbktLwo}HY9)1@BFAWTw`v*_-?%TAx0w2ppZ>n{uMT(K3DbT3HU?3IOySEhBoL-4lD4JlUO6MSN*N zHANMH_#6ACq7?a2?EL+@x|VUPpXx(9PL&)j_6|I&4TIfdzUoW^$QHYl6+1=I%ibYH zSGu)eBSS9Uob{{Wjmy}z6lPolikaJ6&CbQE!}}$pH6Fb8f4nS<_WzbCO>MZ01$uGMRkEZ4z(I1QV06B7(EVWmur>EJ7AuOA4Ofz z5jVdyypR@NVAG0u{yxzU7BK~|JYwo%=J&77MY*0f!PoEgz7q0;o?C5gI|dJPc8xH> z1Mg-XsVc6{(gc!^llK2f&MLBqcIKKvao^Z`4c)4x20CP1(+`=>)!QS@2-1_)tW4G= zGJ|UX8^QNut*^2K_sG!ZwW%rkgxtM9RdG>7Bld7RTKvW;<$pz67c8^t#D)C5yo$<} zlaR7IzGMDJ{3EAM-pr_F^lTNyeKbI`g-w0qpy_fg?inv1ra1moX>a-=FGhgy)cF=7 z`Umx4>J~C~<|Ad;TyxW}k-SVBN=iiqso8(6cwg}=dq8iXJa4Uh`Kp_bYw{3t3y6~Y zCH8E$fRGfVJ}WqAiABda?QOcIX&BHh$oH-3;7_myC*m3>AN%o32n%zrP}V8;M5pqp zsDjB-#+Yxw;SlkA@!p-JLTwD>T1%IUuT*4K!?u(|9Vy{c@*MXy2B;y}$|zvk$vj0* zSzDUMHO9>Ivxk<*tiwb>>&$t(H5+rcetIUF)9H5)Te~R?e3D*~NYkY`*hD+=$2ynu z!51Lm#j+*@RY5EGb3JOhw20_|A3+xN>aq#s|UleK94Fg-q z--jiBm%k?W3s<)w0t4xWsy&-aD>6`|U$at(ku;(ZYp10?6Ri3={xoyofxs9so$ulG zKeqP=b~U~ZYlO_D0%lo5jGEe*ZtnXB0!;FkD$^;#?Ct&{LZ^d^UgFQa$b=OOtxA{4 zwt#<@ca*TOorwMlpObKIPdR1_>2)S@KEE_|)AJ>!=i$C#=x}?Jf6Vv38c1@bmsAv)_-SM3q4XL&zG9eJ9eM$CDS7|kp!S6EOh+<6 ziCWJAsMPUv3oT2<^m@wf~0I9)M!SoD^SoBg4UC_b?rr8pyUTLu&gS+hu z_78aymDaoXXO|XN067Vt zQ}lem{u4$s)LwYKSTg!*>%~@swK?Wg`%uu832w1FQTVJyat!+plF6~z-7HLSJQp=V zyzz0W9@=H8?Q}ErG{D?@(iPDx)pxcMlXU_+Q#}~4~1HINd6zI5r5{T)8Gnp+=AI%icgUHnnEWb~?LbMJo)S9jHWrg&(o zt9$CrOBI<>T~>p|K?Gvgff1iW<$%=uwXW?rPp1*%@GNrd!=rwJGJfh#z1cDTXBYV5 zePb*7WyYFa#xoOR<9^9}@4|?EGG{&s)mwBSj_P;BtGO&2`*YVf0tmV787Y ze$XTHzt91cCrpl$;R!=YU%$BlKBb9rnnGO4oj!{S%RZ;}(`k)wExseVMp}3=qu@3L zgp_mC8v_oVZSVv=&?z7V^Wr6~p~m;=;qD`tygLuor75@o-iNRQ?i7@zk`9#Q{#>1D zH^T*|BGSdZgO-%*!Jf(EW{BZFt<~6@2aZlXeyE8<07fYC$QL@;0nvc3L-!}4ez#Ul zGy-}5(J{J33n_v0dKv2dWaMBk_oWnQD)yqU@bz7*wGNZm!3vX(Abd@2Ic9uL0Uuqp zk9{Z9l)AdrHZ#|02d_?r{giDld3pw);M3codw4wD9Z!fuYT|!tzm3_d)Akw+^AWM$ z6DjKimSvK#BKFgpnjDUq?rZcO8z(FnnhqW4={%#@7d3PU7m~|?CPV!b@Q*jTNw7r` ztt3yK2Gb!a$VC%jX=+iXTkHr7R2|i)KZ&>u!J1)`ElP?<>}wLnTa+8MkY+(qQ&Ze2 z6JcIOh**^G5DV$uP%htBSgM~IHftnhpqjL(OP1m7&Y}T5lUOQVQ_4}Q2Zjdvj!A3N zynV{+%Rz=mLNPx6k&xqnLBuWIi^_(lNc~+&e_gfHj6@2YtPSODnZu|e&8!~r_aHa+ z&7R}S?8!y&&!g1T?k&j2)sMn(K`Y++|vs_ zjkFU!Oc+V8-Al?nRAiR|Ys(n_$}Vy!!~fz;XS%Cd$M%%9RPV{g-IVKdrGbH=j^8(> zP~RZ8D?;4k5GT|lB6~ht zA0f8}#0hcE+IDB{vzKPf zw^#)L7PaXm@6l$LWT{}%VrvcjuLw~wCoIkM(%al zdH2l!qeR!Xir8x1I#UZMV6o*hNKxMm6E6Q8zr%h;A}&ZUixwDax}p6g+SsN5-?pf| zC{NM%fQF%if*_-beIH6=Y}y63 zzC7Wm(C**X>xC(|^{naxV7&=n0FOI+X90!Wg#1I=WmVf@i98I>)iQ`4`l46A!132j z&kHGq?5fr(Je}f#2UsMa#P|A{g)XzHZ%C_}rzY-g zwo}EfO!mT)w(?jzS;m&~)3-YhVZiG5&)ciSUK-}(6(CeCi?CX50>NCNKD|@&{bF=? z!zle~Pm%m9~KlgaW0>w&g0eL&%31M&OMv9Wb0Pd&&%%4t`^Vn zc`dx(Q&+R5S>M++)mQ7ZchL5%IJLV!GtA7l-gnv>92xykyUsIm)$Y)8&?{?D~@#Ss5?$rN&qN6Q6Bm9lEqG)RCywB-R{>|jx zymF=P)2YBt{r0)WWeNS?HolXMdL8zB-b((|m%D!TO?=DT-g|nUb-!Qe!;PSn3fy@E zDkK?PAGj|AGe!@o7-VOC4)%Hil*fQzG~JA*n;~<4?r5GGZ6%XkY#sQYf4mQPt3rYV z+tvNAIwSlhFfuqe053-bf>C-j90qebIB>hn<-{Te*EM@9LC*Aa^>bP0l+XkKne&!r literal 0 HcmV?d00001 diff --git a/docs/hugo-tania/images/tn.png b/docs/hugo-tania/images/tn.png new file mode 100644 index 0000000000000000000000000000000000000000..92e0035cced44e9a9568fa73aa2e72864c862c39 GIT binary patch literal 28007 zcmd@6cR1UB7&Z*+P%S@np(xtwvfEm%*-{jZ9V0Q?su{$J5v#4L7NIp;gxVw$TM(hN zv?z)s2%)7$V#JCO>q(#czTbb|zux0`pZosf$#LZP4@Uwl40JfKeHUr$jpJ?)01r4gs*-s2 zo^rCcPx(Hw3*g}3`}*&BRw0f{RL+p|!R_ByCzm^^F{fouXHUt; z=pdw-=}qRrt=vl_szX_rl$_Z(m8x@A=j@a`nz85#HWD)mi%_5J*9`l)=N1$cv_9_G z@@dpA{`)2N;W%E##1y%unIc=H`aMS%+!=AGDQ_#*1gtJ7bOthT@&XQ==bG(vG_qXSZNE*7py zmyqX9c>Ej@h5d;UlDc{GN2?0Q?~30+cxI<)h0N{S=HDfvUPYbfIJnE+L1cg$626PU z)h>>$!sp`x_1=s=uL1p4nE;3^`4H}TBw45N5!V%3Sn=lW6;cC#M;Bmww_{lbg~$a# zcT+0^CRBJ%VrRX+Jf|d7CTM#u^Z4Pv}zK!@XczJo%WD~OJ$ z;9(BLGRjPIwWOt`*CqohI=hb&)@J7p8n25A0tSh_VS52w2G1YA0^xj$+>Jj??7|Vy zCSZ>s_jWWRe3RnuJr4Svdu#=Ii%BR6oY7S1q2*4-)>!nnuDnZdBzBJur8>`a$C%;q~j|quyok-}!fYSzgTwr;j{|I{lhs)A-S&xA_GH#3I-W>5GPOh6^R5 zGBS0Ftq&B_ZBW2D$y&KdROM-OzV1?7T-@5^dXk^@+(J=O35rJK%xHl#fTR(s|0qO> zxgN}%w^Z;T4PMLC2tY#-Q{%nxrO_MAMfAB^bYZ9JCczb>Mz1^*>uHuNA7|(}lcg0n z&#^SxVxge1`dU0{R=~SYMui->fKPHHXOd(#{+>&seTB|;hddg6)t;J6tUa9J9AlDu z`sr=oa|e={qb;{N4qF@OamsErN*Wjop8E9NPLXbZWeDwtY9jLR9A>nNA@MdY*n5~uBD}D__@_B6TJ^RjrP}q~L?lBO@CirR z(pn3ywDtBUr_qxOjxpQU`&kA@ekWZ%d1O(DLCeQilReutm(mE%DI%hD64s@5V$Zbr z4fEu1xt(HKPEK)Fr;1H(kO|PnW|z@eLCLo#DE`@(@CmSfzSBvq(_@9u+a+H4&f;>* z`u+^eDQJ}HT|1+;^!f~Z?o*huvqwEWUUmMJ48t7v;k$?J+y#e78W82az2meIRo?W3 zfNk6bimA*hi4EKU;Kt#&adF%%0Pa)~fd}0{`o~#E>=kN#$}OTKUyM)>h+Z}REA9}v zUSj-|T%qIr>o zFsaKEAq;vZb_rrrRy$BclOU90m{lU0{*^7EbIJlrD&9SgpU|<6dyk_H60GJzO2i{( zcmM`s z&&J+av7Qq>4uO-O(pZ06g}M2v>0OX9_jd2w@EOV_2S0zs(dS#3Lu0QaN8%8Ooj-zS zSPK&L^^ok$rl2gJyN7q{+|$a86*Rt&)Ytm-{RfkPVOc>x&2TTj(;I>=gVKTIz!Il3 zr_)OpD%8Q8W2%rpYfOrr_44jw0ZH()VrNdVAWaT7UO6HCLw;lOYe+bx6x%Xmbgw4} z(v@6fV;mEf(DtvI`sQk|G^zDw@U&XmFloLZNsCyhw*aj4Xry} =4PGA3CM z&Bfk89?hi|ryX9I=((@4_A8=kHQ}n>)jHr~oj6ZOeIi-A&)OdStIC7WQ*MdmIik+EUoL zoso^u$Ape|Dro6HWGO74zHs^~<9WeX?B_4?SiA(!X9U!chH0ktZonchXw$P%B%r zQhEHUphM)WdAF0gZbkU*Vcc@tZ%uVc85v^%0Ra>SLn33qFq)p*!uwKTIz`1^WtwoS z;#*Ndz1ZFs2Rja5I$k;1cQGtS3pumDh_tev`SmH-o176~1Y1~FXRdBM3ys39MHW}; zeA?X?ZhvvhIbu2^XG#Pgg#Cyv+L13H9VMx1+DY_-Zj=yAB%%(gnxlrbpMSY8_i;04 zO@?k&55Z_Tfj{elI#j&pZT?m`RU|k{!n)_pr6)CpM@$c2O`5f+8yGEqt})Sa%!7qy z5?m(xrH^jUfp2-ovBdpeC2FquiaC$>X)ImEAonqQ5yRg+Qwr{yLU22i7s}hzmK(6} znT}JL_nb2)vTH#De~z^1VVX99OX-cQpgx_5^_^Y#YD%a-`TTq?p0*p-MQBRI=cdC?RU3X~xq)@;VFt=tyO*_`VyY>vBz zw~~zAT2FdZw4*+ACm(H)MfS|KFNu{1*DrdCA+;insjLKx+#>{~-GU5e_pT+e8YTne z!rh6i5=A-69ov}yn&isoJS^3%$>qu;VD0TX#1R)p47)itCy$ zsejtJF05pxH%2bQtlnLHssa?4?G`5)Em<5*b?_wJE{N@FgnSYYTa^QHDh-uR7{>Wf zb$j!-#F58WOlPelq5%Xr%<|Fwp|TS%pALAYTqvGT74-a&nV-7tF3F)wx~%x1&LoRc z=RFg4=sAi-Q?7HCRS%$sOzt_F=d~G`JhlSWDDestZPJRa#Xa(_P)rid|6FOyT%hRd zU7PVFMZD!>P{~`iT+v(TTgBn)RXOy&GXrY?5`0QA)~A&rz$>Ok zY~9SA8Q|HXqR0l>CD^h*@U78ZqTgZ^EFAaz(4S*_Ypf*#k0tEMBJUL%MXQ6(UlcDI zoU$P7!*VWq2+ijiYP4$_sIm~YPOO`a?8P*vw+a-&Fk{!nymkZVuTz^ z8ycdwIM*FXMR?|)*QY4c8yj$>1*k2CT8)p3R`-+|A-z763jJ=n> zqGRjZC5L4iomx$ZITkpRyxPCr=pcW1o{j9ac^;g6(kcMW#C+Gvp2tX2`=b_f z)o&S>JRVpE;iHywJ*efT%&vC(!*K<$){-t@!fZBo-Jdq2o@+J0czu<-l)OPq5u1^O7mh8*^ur6ivhc>;7X z$6k+AHk|wkLaFU0C6$M!=GGZHnPeAM6#ujUOt%C*8Vy@iIEcfDVtM3K@zK^2?} zgwF^Xq{yA;FY5bub=K?CWrDx@%k^M~UWhL#??(#(KcDAaCOKAUF<(g|0b^^FCeJh@ z$il`RIJb28%Ml~o-vt5%MWGrY~9o`~GI;S;FeXchAuxT)s#(v$K$pgbV7k0VON&ijG)XPJ})H8;kB6 zXO`RH0MRFSe`PYX28*ZO6hE+u&Iw%<*2B?IIl_MM-|tj`mg(q{8;@JKZXr8CT;9ybDwRnI7KG4GcHNaA6R`^W4 zZa@Y$rMJphre;gi=q4JlG!?zUdYzP3;;I&ED|C2N>MAw{t2yWH0v#(ysILLRmVcb4 z5FK7F0{B{=ooASF>+(e;#N|}{kU$CVuk8|TvWrko`HRoC4ltTWcMqjl85~?zT}%$1 zawJ2Li1UC7YbpbElHL*!M;y&HV*Gx`<-SZ z;2^@~@2%xse+mp_ZeMOY+3Aznit?~?cKHzZH4AO(8c_FR5zALEmsuBrq-hQ+WO1pIbO7KvBSYefH`@>FysB!7Tv${_jOfDqnC$(mx%e}KUeoR-C&fXB3+-SH6pBXKw^9Sc#k!%+b z5ZaHxbxqhRa31d&v@P>coI?*ZZXH#+yy~6$cRVi?QtwF}`~=_mN|PR|Gq((SLvI`V z?m-EwKsPiQ1)0A0T2=#Osu`<%PwKPT7XVxT92id%Ws+=Cl=gl-JupYVNxE3}&MC40 zc~5;~FQwnzW~QYi!DMIZocBnB`MEhS;+Y5#tMgTU3h7?uL#I9vRxhB~(X!fXd>Rj@9VUf~wBwVV`qG&N+1R2iqF#2yYj3{?i_VFpHGLi9$ zSpRyT6h#d{$wf^wm8diN-&8HLE+hplmyv%+CRseReGe+W&Pul{KSCdCt%&olFY6Pm zP&Bz%G}wNW_oCM0)q&gekvk@vE9oNRw;k<5i$pX$Ye8=~Z`J{MI=+3Ax_8~aE$@%f zBO~*NzAy6guaIQBQN1qWbxAx{I<6ADj0w=ow##t{Q!_jtl6ZXrg&EZo@!RY2%(zG! z<5ys)5#WL5LDuzr>aGcc&vXR@h4WHpJ?KNNxt`oXDEXTY=8#H*Zyn+(_1*>4Mm!M( z3=pv9f;^eCauKjX>3O#E-~Nw-W5uQ_q~&mhpW`=|GH2Gtw#`D|R)gifB$tzOD0Vqw zSy3$F+Y^jawOMR}mcjnmH&zB43+yr3RmwJ}d>Aq)gS?YS+)tyUjM51BhqvFAd8Ypg z{3gJ`@tg7gI@r)Xb$h$y$Zvj`pZ!4ZXoIreEE(A!vl9D<9{tN+BqjJHH^y_KI_8yk zdNC*0lcd!qVu({ltx^mp*S0|va%{A8d^}w0maSZtYRb$P2@wvCC#`<3PyfRd%x$X8 z!bXk4Fr}IM@b^oPQh5@d5plC1kMBy7XZIR&a5tAV7lp+8;5w0Ed8_vFw|wRndIa!$ z#*w+-mx#qhib`Q5>%+GjKO=@Oj5R)%3FzLFY{fLWXUX3Y-)+xYPN8;8&at7yWc;P$ zE80W0^_I@x6G=l7y-H`7f0vEd>6c{t&5}` zk;4WGljwD9tCL*}?BI;YV#CiD__eus^N@I9>?H^%t@EY~+0 z&kJphGW)!mXV~1{S|3B`CH;QoDh7mjK=eV8K~ycN9xt^M6IIp!t zJTd~PL;JL;Vo_xovr6DOZ(vK+pP0+lgHxsLa3W z-3n#NB*D^IVKLY+H5dhnFaEx>JUz!Gs#{ut{_sACZT^Dm z@JamcjA`KGjN^ynj?5x3Y|1dBTX@nWm#|eX-r!m8>LW{P*v%P=kyP6mzOx)PW5^29 zMJB4(mK68d%No00LZQ@X2YC@vY)8Zu`` zSnK*v(thFjsgq_k8}+Py%`J8TnlHURyijO~O};^hZi(39zt6G>U(hJx}HUd;{IG_ zzzkj-@Gx$6HKF| zZ9-5!jZ4Tu>|Ps!6lXDZU^m3R5|2Pcob0IiAQDf>P zLS%dt_uRCNPwJ*o!JEzW-d*|g7t73JlPqFWPXcxp&ykum)DDutft!W~ki{6Ah18cG z()|t9t*!K_|^2<^sQl z(nru0pc4I^PDT92;L2qxLT>*x+6daB+41Nx8cTpQo7`pjI{3~Y;PZ)D8?2fwX|3%! z8#f0fX2254zihH}2ysEYAf^AVlTFT@N1Jp_)?ak!T8N01!$j$eFJ@x?kAiuHRUYHU zw^FZ1?B!tZMHEKKaG7?@hGsTg9aAOD*9@lu-7L*s0Q*=Vf%Af0GeKxn6FHdJP>t#f zj`Qu^Dw!8??%?EWOHQD>K;mFR#tp@+*ukHCW!j}yqik9*FaAYL8 z5&kFTTFbQ@C*z|@#*K|LEnPH*R*_;~qnTTF*t_c$Qk(Kt{O5(quHy-$ z)0|;+JE8gd*c@^`Y%F4Hw;-;D>E@Y^M*_vl)sn@8mHpKX3GG#_s-$hGjqN-g*vHdMon*0RM8R6 z>OqWDk|4UKUt2#hQ?qF=pC{pohE2w}Z){6W<9w`SD3@i)2j^5=;LCv^UQm^y8C54h z8EX8}F=|yaO~8eQ8NT5$6~-uaHBCR*{mCP3t7;>&o+V#h<1!jdNwvXxoO3kG8AxEm ziQL$Kxx$wuM5D*|4QraV6gAXG1ok*=%~NXLY-b#(W!2HV%NQ$?FiMwmIL`RHLz%iy zqqzaEC#3vzvATFDkkPW@ z9&~h?q*4VM!(lBg4llP1Jrji(*J7|%;NbHpjZ&*ma#MA#!7t$@-#k5*#hKm%=UXqI zx!p~@WvU*~JlQ)h$_8SGx7Y=qc3T0xn>#H%Z7DzoU2g417Qy_)SUvGncYrT@&$7E=41#y#nF7CWeW~xd2&VgR^{HHZx%Liuo8h*^$8g(?bbLl$dB_WqaC=OGtR=*> z>{r^%&{)Ruq$+2V;p|>LfXu<8VW0i*Lu)H5kG~%b=C_>_&DOthC__j_`)WAFO@g_4 z!d-CPZ6^a{V6k|_q9I}Lo7h@pR|grh0NmojK51%w!%IU8O=K2+IM&3PJ*Jyal9tko zW--l-9=&SXbT8OywMD-qOeqJ)pJ|)m_Z6wG_a?shnq(RHLbtB7{{kD}uKT8$bL=u= z(FxWpu1$eY1Ex;ep?M}+5!ps`O(SSp-jiSqx3LV+(y{~_n_H~9EPlfVkdvtXCtQGp zCta_>B&r?4k)v`}LXN(TDng_(mxcdgY(?rcAsIR;W1j8c{+?t-(>Z%stEc@-&y)e9 ziKIVEeZ3ZX1ij($-PfIbjC_{n0_>ZV4SGWC^Ut3uB4N`JYADP6C`KXDxaF6}uy#SI zwWg9^`#J92)!fc;URM9LId^*TGla$hNHb(-6<{Om0Ay=7;kvOf$gGn&i_Yf$CQk(j zAm5iKeu~(bmsFi^>DeN5yRU8*sm)cZTP;^gNfy+JNN?W6RoXkm=9XtH6Lgp{+Kt_% zp0Hh@kO!sdN|6dQZ^R5;@7W@}&WvBX^_=0Y$W6CS#k<%1S$O%;f@k3d3ej|kKvwc!@PQ`w4mX?eO8lR--lZfJ3|Kx^ z&gk8#Q`-2V+8@9C3X%pZCqAK2rDoCQN2x5{;r(F8VkAVRN902O(^x)>NA9(1b#YdH z9%-@<+UT%HPB5=weFJf=$9XETMu-n4B;YiT8H&W7N2zHrn`BE@eS{gOu z3npSA!45%8UbV<4LpFNH^{bSY%%_<^~k)+!Wg|(a~=S-3A4@&`(`nmaS z4j|U|ec2;%e4fAfBp=Px(<}cRORakvLzgobQG51!aH`qq$z-9PzB(yG2-SC48A7$! zWibc%oT>Vd+BafBA1$8g2#9ACvw8UsJ&x01IUnA2i3Ctan_%NK{hy%lfm(m2V27w* zF!60$HRo|iso&(s(`ad#?!RU);QU%vxN-j)J`VwCbI=(P*f(E2;cNDmmPIW6lBrA_ zQK}>ty`XTh;Dz>?Xvfw)v3J&bda4d(B$3mFrzL+M)oD-7&Mv(_Ib-h~m++tJ!6}P} z^AkMVwurgp?Cip~r8i?ZMSFB!ofoOvV(#Yjx&pr_M0`HWUO+QgP~X?5IV$-xdgO++Y;5-zj-RlN zFh9vAuvGt-_rXN?pDE-2+Y_Os%VtnRChv$WnjBtaXNjv<@0!^cpZaoe>7SU38!O0! zXER!q+d3(Crm^ZXBKJWG}P2*;s@wT$w~Cx>hvk^OjLVQMsG4~e-5`ha}HeVpvXx}n{+f!zq(V3jnKA1Bvvbm0L_AIHtb18 zaVAxh6$ZRj9V=4$)tuPc;%7l@kFx$&hJmPHKhZ6|es_*Pp~ta=(XwZo;i%R(k{chm z`&Gd+ATlP3rqBbrXX)k`j^suo4?bMClX08h;KBY{7CB^J{C4g?5gdmxc7u%0QUQt+ zW*={xngkCmLZv3E97TiEc8ZOIeTYqqXD2t>rUEHI8-~?#B0@T#Va6{N(m_FX+7cEM zwJ$)$ljsO066<8Dko0|NY!+I+R&tNt!<;YZmnt5+sd@K6TjZn9(6p&GI*zrE_yr=c zwihT4qw~4ir+p%}+Y8_2&jTuG3 z-7LRYonIy=0~%3~KvZ?<{diSZbaC4saL}#MqgPTtJtO4eM!Cd6?aE>zU-+4I-$G*?=V4Ys)^Ol#nA@!4;ESfPI|d;EUDDY}MVQJabUm zd`x9_+jL$RgRi8cncrfEV22HUP0W`i%FD^|f$etF8@*HB2XZQ_4M_hBRcVCK=s1*^ z+G_p+lLkqW9<=)$U?PELs3^xU7fqc8Mu#=aPXrgqO9Z?T5B(#D(A>R<^rOjvvTVwv z&N=?Fo_4!6GqbxfXv0(IPtItXqJUvLz+w6lnxsCtw`H8 z;xP7_*VbbzTO5Md3{KoE$#)F%l#S!r?6hvwnJ$$1f$zHz( zIHrbM0~p*W@_drRP(UhI)l^QtRzs*sa~f@UA45*qxF=;N67JexZV3)Z3Q7yx_?yBnGtgq}6kcN$i-fk7!GZi*DptJjV^d z7aDi1>RscmhvVu!*y7+e_@5~AsAeM&18%a*ma?k_C(51I-hPq1cFm-*3EHhk;&Fhg_% zr^u~_R(~9JXmAEiEIKs17q?y;zIsLZdadP_YhFtjZjoZ?@ots=O9ja1Hr*oT(j2#+ zr~!mFZxk-$nbJ(3b0s(@xHWnWrM&p7jnd-zVXcPjF_ZH|Ouae&P|E_>_BHk6dz1?8 zwrB0I)UCS@C$94UcMACE(MOO<(g0pTv%u}fCm@| zET}3SHS|n#Z4oSu1J`;_cNV*_10VDO+nWZ>J7dm`h_h*~bELf+hhd+)j?q#72F>o?%^Xj< zKq*o1gLGG~HS#M4)qZiQ3|D4XbJr!1QSf`sK0*mnbmBj4d(9yve5rs&A1ugywZ~`{ zj0!(Up2G0J_6&vGLtpA@viOJ%>!#-Kzn68xV<|xk1-4=Da>CZnNlNeDlnZApY(vHZ z@%ElKDS2VJ5vI`zOB23-y14fa4v(;zzP)GpuL=t40+x8^^q+ETbhb$eeaR#(J$*az)UwRus&_}EM_P2{lfZa?|I9at z`+$?R?q3Gn=G(%c!;<`(`36231^=H(z6suKiIrBi5YeFf>YV_SpuaA4lqe0Y9ML2~ z?`tFG)5;Exv9_Q6`TlH>Qfdj$hN?-|r8U(VtpFsf9=zm^GqfBo<{ZeZE1yeGE+N!b1l}g%XCY;k2->$X!%a)?GWDDP_2O7{;zuS2tEddZ8k?=<>I> zNC2T8o8L_r{A%Q0vop3vjSi@|lz@Rqs1T74^I`uay>FvT4*Kb-Rxl-2>N`0q1nj z3wV7XV2!eHOR3kCK*$6amBU<0H+MjqCGj)XLD8i`mR!831EY@v^IrNajZ_+9=dZe` zm=bdw)UB-CEHgGI3VgI@tta|qm&!`b-5-|UQ3OeU!Fx|TgsrMV=?6)w^Gm}Lme~xB zJWEk)tW6+#(^FgswdgJSoZraGwdX1cnC@;#_ECm>%DV|6)Gz+Dc?N0{iC=$?FwVf# zn+ageV2a|c*!B@q=g_PmF#(}7f2k|{<9+(xll8hJguJpbw1~L<=p{a(C=KkcEl5<2}qSmxOLOm}ximg0gM(9oow3`$IrL_3~C|^kfIl-Ik_m|>r5Do z`xH+~hw4_3h7S&fLJM3tTU`13zA}-7YLn74h&i0y-~2usa}Ks&z}THjP`!%=>LzL0 zsOD-u-m(uPcxfh*9fU4UJHdZD5}?^CcKoF2;OqmgO=^)4v=tya6*k`}+P9Jv8oDu2 zu;rnzn>o?2u5&md;jGX#Se8M(j1QQ^F%;zqU^j`;0qw1^^zikUjv(tIRYoIGn@u78 zd~2!C#?1hp5|6cZrvBgsKig{Kb1fe)m!LgHD@Ln5KN)#0f*PJwdCIVj1*`f%!DV7{ zZ_I%*A0POBxp>IbDZ<{ySGDRe<6fs*V1x-S$|D6eMa@(WOLSEL<*DsXxZs0*25LVA z)N1uar4E=u7Z<#osWYNMo|BkI_Rm64+1AMQYga2|5KMUHdWTSQ z_&rGgdjiX`1;`pfk=?)U6vs%izMOrdAtYU4!fpS{NTBB7#x#7Uan(q9md!`VJF`xS zX&2T7`G5*&HM26U<$XAxiA`pvR&dpsN%85>IgiXLFVm+vt9Q{>mdO>IGO8>xJDSWs zWGB%m!FVseSP^@17e<*Cy5YXEm5@hg^9-ojH&5kns%Pil3dG0=3LYgjE0B(M0p)`p zj?~IUC7lJ;0ejMEltvgHy3;mo?c!3@jmVn%m-<&ejdfGjMYO;ti8aG*3!Fsvg@l{O7^ogXz|41I+Hm{7g$(YxTJ zR@Mi{uvK9y^Ji>l0le0=^G4I(rm&5r4LkVrJ$9{t>DtXE(}IZfm+C%bMQBvl`8?+}NO$4*P#)az~zMQ3~_J%6muEmUzW4@3{=7VS)$Sot8R zxE33|O%b^XM>Kdj$}CB1!-?r7MpbGFh;j8Q9aL6zDp7~xjnW+;O3u#jpr4dw_4&tD z9o@txhExyH<0RHv{3j8=ZoQ_NVo{~ffX`a{p7mEODfA|u#9`u=BXRH*2Q{SQQyj$a zt^Ss0Nhz5MTaUT1tICdv|6+*m{b!bgsWq-unaZY{y>pBa>=$AXeMkz}68%iDM=Q4? z{uIBNUbHSJkgsUO^L!TBWGVAnnH@U)f2_-d<19mp(TDELkL8Fv_$P;`Pg&j1oprByU``^W-2Y^JjS30Z~*5O4^{-fLIJXQt( zr9#a?=>IrDFTl+ukaiio;{y!K zCuwOqimBIa>HXP)^NOQhd4ow!5Yvut*U@&5kkvABA`|<+Pvmu+{Va$9l>rvgjR5Xy zN4K0st>u9L_c(cpuzcA*wMi*teWg3oUA!bFz}4exC!p!D54_QCph(Jdc2ia>JkX6r zLo@z^F|@6EuS8}yhH(my%@5wut8op-)QPGt6qvRGAH!u_9&+stzh^URKri1IE!OiU zGR8jNZXtNPGX;#ZOz16g{iGTAx6;w`!+;@SOx587(eu>!4fiOZZ*$Z0Z#OS#7#1X5 z%p=o0)QHG~_%uKaN?zC6)0FgR#ek>gHEunKup$x66@N%&>t5Y|JL#$A*8G4c71+viSdU;*ev zD*eD9*ZRX0Z2q$&UG47$q+)fAW7Hoz!VXCmsN4|VFQuemapn&oPw2u$)cg&B={8Y4hB+^3^nmMn?CMXYV=D8~KaT&`F=T|M-FT zy+o-&OZPy^Oi9g+J$$zm*6h&>y$6?{#@(skUr_j<_hG=CTZOEgLy&Koh3f&m2cslH z^^H|#M0N!WUGzUMyT2Vm4BMB>$lo;-or@}9hNh`Ke-aflJV#?UxhQ+HTf;t{byEM= zV#S6dXLSCJ|7WbN{|lwa$ov=}J9NaoHL=dvq_tEzjN#ma?dr~gYJp>^7bZvgL#?c> zu?-D(ff>u>H(~;G60YXxzVX%{KTj$hhJrQh9RoZ|9wg=gQBlhbbD$%3WyE$g!6VEe z=Hijt+&s57p-Y|}h0jrXMpi>{?8|L^#pYx;!McDnb|G|_ZDr};e3b-UZ*Y*7lLG<> zR8=P@hoa_hTirXz%8xqkIP}pa--DFH=6Q<%|*$UDg{BtN(D1ulFf#6wywoM z)q?lKo%dC(ma=v^v2X&5sMz9tu)Wzv)H@J35LdT(Jj|)8eT{*(!@J?-35%em^0gmJ zwF?XV+JkZb#Gilmq7(mC{8;nz;$m4_M*NpIQ}zT^zw~VRf;4-Rd)a`zd6lETJRV0) zhKbt90ueo^Yw?0;Z2jY*3@`Htj~qd-pIa4vzP1>1Zj{2WdVgo9?x34^jV~A0TS>yq zMs-L^3-S&?Q3zvIFodD!J7m^)5xRMTJr1hn01Lv>n~Q^g%M{ZHC4<^iLZ{hQ+IWx5*5;rd-5!^Q~0!1rU-~TCK|E<{~GCay2EFA$MA$NN4P@QYo0l#)q z@}Af9POq7Xd81(Oo{3!tjNN;~@#V4C)`h(xj+NN+u26G?x(-dwGBpKx16^Y+_3jL) z*0lr`zivf5U5JQxLyey)e!YE@(^d|I_l$00&PxY(`2h8=qOgUwDrkfB_wLH^Nh{Eu z{w`{>4v*@2wA0+xG`NL;RfCZo?-|rBaYe!cN0B;iq4T>I`NaWMnfcX5ISQwzY3arC zr-YM;>gUg-6bqWeGV4R?RG`#6F;VM<=y&UZBlD8y#eYYgw)z;Ep|R(jT4f zC1XKu>R>%<<3or{7(l5}crB-DT~ZNerbcMfGsPw;x!MP~@o>ELvMjlt#KUAJU*u&B zS?8K&=O=fAIA0$}%c~oV#rGsk@LE)8i80rl57T6@v6MGU1K#|ELIL!!NARXf#CFGX zm?*sPl@WQNJL?eLyrw3XqYkcd?YGdu{h@z^`$qDyIhn(MRundES@$TOM3Lh}Srjr9 zy#&GU^N%i32qmB$y&`|EhbWslLGF5GLT^LFp?5RQwvZKP(b#^LSPYBfUguvfLkJod z!Z*DtNHRi@w)P_WI3}ekwli9U-S#oK&OiQ{IB&+ubpl;^$*Jp;rgEueoCRfz*igf_ zULl+>x_q%B46ALLo*C{Uq{`BdN>hGVkaVG#v!)nbmG{_kj`8b*0b)gAqjalOapU*4 zy7KaNOQxb*dbO(TK)OznJf7vx_U$&JdO(F8;CP^&HCk|~iN3fl|4Y$StMF@6u}s+h z*(F(?UjjA`SQ!OzbR34Ku3qV}+r5ZV+w{;48I{fWAm2PIt<1x-1~~jOLvB=^ zD2P1>i=JAn1LcBIoQkc$C;o1lk%vh5;wI0`HnN1B(hdm!;N#Wn_W*dZyftY3>STDN zb^1|D3d&%&P(n*+%cDXFFMaf>OLQP?Ub&FP9>hyLyX;$56|^w&H}rgWpGPj9w{;bfm((aW#;Hz}SZfoX<$#s&OD2+fY| z8R}&{pM^V9jT-Iw0K1zIz^7J|=vZFM*Dj1X)hMURv-!HuZy&uo@^SsZiw;2x2%g1o zWa&LHzumc+NoM!@&g%Zl;d1IsE1idL-|*2&{?41hmdOBbe4vfHca_MoX;LFFpPjn@ zYTD1W#u6dFPN&U0M^i5o&QHqf#$E-d0?jH0V#TMNrZ2tYwlP|_jtf#P)w%>kg1_G! zY?Xl6R9L&O^NFa#-+H1@ktYcp;1?*P_&R0u7uBdsSI!QSDjbrvLbi^%Y>F1Y{zZUR ztluytCa0m5{Kyt{9s{7>u|TU*jCq%wdYS3)f7gm|=DULCAc7~t>z%OLdU+N7^c*pH zW+BbBT-3|ksz$|uhz<}fs`WzG)BLJKlbThmJ$j49)@&0(l*QeKnh>afgUIHf#X;Sj zM#u(rPk^--odn$2=i)iS?t}im-9Xt#U-U*yJ-@=TT8qg0l(Sq zYN@01D!=_z;7HXC>0%XQ)p6$Ac8f8o(khcWd5>T3|8Qe^hQC`1$y~Z?Z}<-2H1mY_ zq}8)$uU>h#HYb@^O)SBa@WQe$*}kMUPxsVBP1lg2k4|Ity-ZpdqwG#I!lz*)@LK(H zG59;OP+&-FXh8yCokm6ddjBK_v;Y7H_qC zFmW=#ioUj9VLhyfCAk!YZ4d8Fjx{}Rnsps6gZY`ji3=l>@e#Flve|M;W0e4G?gS1*NC6qIk=SpX0Q) zw=KPY%3D}j1Rz7&Pthk-NUa-;=^!QdiEe4!}mcpqx+D( zi2905%#BHw1w#IxX8VOvNp)T^J@!Q+xi09PiU6LN2U8T7@fk`6+@p`QAcB0xu;cA# z*_LzEliz${z zQ|Jt=^n2&ibO3jN?H1H4_L2T(7d@f@~+KnlzxlPFs30-S!3jBGAu-iV(>a(4k zsgzNG#7;FyltDUk@|{gItd2am+_XsN5%9itg6-yJuqoe*?`P#QA-!v)>W-_svk-_( zo%gPZ-nZ+*Pp97>Wi#mW;J@ddH;*+WyhqjG1hCW^`aBCbk8}48BOo}B=mrX!>?K(7&wQYo)m!{~{-Iq@P??^8IdsDH)aE|8LEV(E zq(^lLQN(bm1q@H6L9BkCwD$jOygn=UYf3-eD8d!nA(EdbslRP9xiQgHZ%EqW z+9j4u%ohyXeU(ro7+Ntlw|>Y7dA@S2C&VB`()UNd)?dm z`5(8P&!6)g$}7;9Dsq8{-EP30;1kPtJ^>@Y{rU!uU*M9vqYiPe&{gt(1m%p?qx~?~ zB}IL?5A!-R=QRC$CFc%&G<1$usF>;FT!9}xSvF}}SRWCK4hTg0G_Y@N;WvlOtgCaJ z%MP!NqE+x1xfisF{a@{UXIN8RyCxP;LBs+`=k@g!>4*|aA|NUtT}lWopaOy*gcf?S zqadPEf>bGikdROldcXz)Cs)b+6|x z`}7873lcCB!8hLok+4GE#GcU1L*GlV5TJQ?p5fER>}Ks=BS_XujK+3dWdiPcdgc-6 zQcPd=p_*+}6@4w2F-NLhhI*S|^iC}19>~>`D+?_kkm-&iepK;Rzr5LsE+%t+SwK+Y zTztKwnbuxI#gSz7}Ab&%qg^HAwSj5}yCGAmM~KSXNopSm)EZ z)*laxDbH?ka&h7^lt=1pWAt8&W#_g0rF)S`xqyP_{g^xovYwnz_-+JR8|X5OJ8o_j z{vPZ`GJnJllb07v3q3BBvm|T)5VY8ceyti>_j;n3K;HPvU|!mwj!w3@h<~dP$jtP1 z^X3O&3(H;>oS|t4IigG6O2dO!IXx0i=3_M>bozoq&BUmvfP@f0n5jE0TK>(?FM&9` zk=>M{FCz>`wxegHmH)nFoo3Q?Oold0AU?E?%{iSaa~@<}D$`E+6#Vn?uEb$Z;BE_( zqfc@~>Y5lNd)I91OhG==*W}`5FKmp5Uq;OTHmG5(BIvYQC27!rwtI^`k4g;&f*rUG=KXUqo!F87PrX>yJ;Dc4uc<0Xzs`=NKqR0>vm+{UCa&{u9P`ZJ&Ihf3{!7!eWKk;wOwvkmv=|O2B#|Am-!q z)5l4B-3uPvPxT1;`XQ9@Gj=Z*xUT81Zh-jhn2v~l-*ycvRW5)@?4L!W9IfIju2qZ9 zSNK_yCP_dl$A#2dmn0Dyt|I*VJ^Wa5t|W_lDo`ej%GK^vavP`WoiswvZ7>VD+B#Sb zpI3WmVT&Kpo}Ds}{CU6KzT}oC=^?5sR(ryusCTEgO(lr+w^wWHJ8HvVOpXJ7prj{- zfytLPTNhL`kE?%h2nqdWSNgDYT7(L(eUPSf6M%QDML@!Mht2eP)|u^gu`ZY8^*ilF z2C;@#mq2uJd#YHyeheP&UZa;4@Fqs=u1F`?Cbn-zP8OdaMP?U?FdlYAFougc)7IiP z*IVwDN~_}In#LfGOlkr1w@mJv9d1p=_{fgWG}ws}vYe1S2#?pi>L~omB+LGXBg9f| zg#OIW(4*dD&i-O~M|LQ!p;9Jn^e{Yd?C@BqBWe6nJ#%$N)_#ZV9kHR=ONEndyoOMu z(CH5sDO!MRAK+FWMV;Gs!<J;lIuW~}<=vktOo;{Q2BAS~P5!-V|LdSQmSlOqbMZK$_wb%?6WXY2jW;XX! z*t7S+_^+Lf2?lcJg1%f-o9xI{maxX__nt)q=y~rb8x5%SNbp#0>eeb1oFC=s<)mz8 zR<8yfIiYD1?-2F`VJ{q=`LS3l+{o*5E4|Zs8LKSqXx6avg3Q{`g!?z0{HA-@<9iH< z{6B2Wc;NYqdIFcMr(-1|7i2VdDE=)$O!cT7~mS_@ZJZE~4WUI3yT>&L>_vxT*!@{P2!Md@|?0ys4lF9LMdmh8R7V$|a^CbJrgnkpq@_t(Y zC)dExG+n@P%+1$Q&@)o`k{!2a{@62s7bntB#kN+H5W5P;G@Z*wgJPVDsYem88@5 zf!(e!ctNyx?Leg|G%}eMxjg|`P&nA!003%$2Vb|3YnT$#wV@$rh$zp2mR#i8^Ga;z zsUjW%*??)Ux7)v`oc6Pt#znmKvU8?bEB{pPn?7?lhwRF+-D_u1i1i4;OC(*jk-)BZ zWfVbLPN|#6EXH|bJgtXcV$8S_jwB=GfOdw!!*XfQUpM2_r}@1U@conyt-e}Bec?pB zWNvn}IDVo@Q`+-diC$I+;oj5mAb`W(g8lZq$g!XuZ!cN5TA{iaIG64_K~bH9kyAgJ z=Qd}Cm_v!GakX=HAf6Eh;Hh>nhltSs8`)@uchj;mQAD*w`(@H~;rRaiF_gIIUz$cyAc}J0U?OVCxnV(Qn8)v`sF-^}Jvw^4WHZ`3yZG`$U`rC1X0=|BH``hBlz z_1vrk@bwAB{iUw?JGI6J5xJGYe+sAUY-%}UZBh^mG#19k|KxZ8g8;w&KNIw}jsw8< zx9aF+8cm#~0XW|bg56J!WpUqW*zZNfQWwnuG6ax!Y+ZbHoJR^k`e*+{@d2@Lz<~cv zjg9|8Du3XBs%M|Pf)jaIo8kZK*RPt{oLGK-{z*w->uS{I1+06I9HN+XLt|qrL&KOT z7pGAhc?E@DQAAyKdb-%RrY07x2DtRCF+eCUb`o*YF?{tK`TS!=RGZp#hN+?9nh7c? zX>QOhtM{x^cy>#ZUGLyQkTdH#&_>uw1|GKYsQ7)Fx=ttf`vuh2o6|KT-t1ZOLSU_T z?XP=qBu%4+MOfVl9x_Jf=kK6Y3kT|L5fRllot3m;$41MI=8fn-(z51C&iu5Rxqr$; zPW&cMeq@d-wQbMeB7~ac@Z;3-TL85ng!*A zx@kA%St!i<<8ponjM&4jl+nkN)0B;B|y9ttViPFJSoH%y9067f!^ zLr#Js66ltdlk8!{ih9M}cDpg>ADJK{e?j?m6GVqxCykS*;+|1vlr9Hb5+IA$L^{So zafOVR4U>n|Qve(>{wO@^*(F8ArL*xT^&lweJN@P0DH0vLN2v|ioRl7zO;}Z|D>)WgXGg%g`+NwCcLkF(K(b+^&W}-a&hZt+-}{&h^r$vUcSS+s0>R z@UVuv=acGP2s;_!k54QP8AJLNx@w(_q3A0%`VtVm^SdrPk`J85>NcN|2gC{eOJpkv zw_Nh}@AK_;WL=$i$H4Q$>y!(c)=p%4-r5teH0EJBY3Tt)W+uHja`8QVYM#%d0F5GO zM&()mU|DAw!~cfedHF_b^?2OuU=#c3ZVkKU3cu>)eYjeFv~oXYSE*j_!UtyWxsNtf zxgs$82@mCa@DEy!SpDkekye=?kHk{8KJRRv0*}-@^V=XTSuBTB)GuK2Re{_`AEK1P zFy@?odeNB|K?ykW^<|S_7%qsvaOUGX@Weni_a#SDj;J_=5O2+G*W4JnxNEzjQ3>39 zq}i0n17M{4$E_^&M^7K`_ij=c%Lb!7&54PL3-tnLaZ)op&-v>xYgKKDmLGO-%2hBT zK`1O=FJ9wDZb$9l(I5F^1cyzq7xf(;9Nl)-3lg|s1+Bk9O>XZ@ST;6~UW%|Pjd&$k zL@iny;!0X@$W3GKKDnNTyq&cv6S~^9yV1TTHb#mxVr}-O)}pN$fE>i@5My=~Hp+-Y z@lSiS_GgJw+pK)N-eiVMiH|u=$FBQV;654?(IGqcnmphEJ>p=3evU-g2DEo;X}fun zV2`ir%Wzd1z@Wyq4Nb%1B&ryZu4;M@?lAg7CkmrMp8l_BvWCQmpAJr`=Ozi>@9*Jb z!eZCZs;iGfCo+PpdffY|9a{N=X{`aXjhU(I+oGXNY7$HTfKQ1=diRwxqEM?ZWaCx|UXy-q{68V9J|c_mw^k!`0>g#N1&YykQgW5BHhwvQwt> zL}-M?Q97k-qXs444YDs~_zic7jN*tMa&1s}a>3#@)T2+{wy)6#fQ;^Qm!k&0kvaw3 zvM^`#H&GY=(V0+G*S+|9_B<^228iBkM+zx;pI|X%@u>U#-$ajXEECKt*eKaQzJe*) zLnwaAvdQWRP*&pDD&L2khCV(ke3g_&q9HbF?CjH0eEeoa@=E-%zE^sU@PJVpc)*S_ zxkGAc>Rp@Hu)|MDJNdslrOcdj>m(ro1EP`YIYRtm|HLaJ7|Cy&(Lf@B&@QtFD`*-D zV>E2yLwPl?>+?Qbmh?J($8$$QcT9^p$!Hh`l?QwoQIf6pm&`y8-(k;6y73-eVa|_` zf_emFO{^#Gp0?~s`Y`ASgGc3>Y8DkB#0QJYgxiWn1>~)r>+3sOe>3Bi1;w*4KS;vh zso^%{$iR7xjN@B8%wlbyi74u!N7`|~!rfSR?hKIU3b~wevcx`Hw;1!!+UddHM{wEM zpBnle^Te9owkm-aH*BOzM6gWGbEicfqV-iaq(ApWvYnM^?+P5PGm1ITip*%)pVdY| zBMczsbHM;F8#w>0SC-uljr7W zy`@R5vRKeY$uB!n@T<_{5{2H2RCh|r0Y5902r{XtO-ZuAv^{D&j88m{&K-})CoI}w zbZg&muUmQSF3E~Rc6>P1Gg=qAbp^vRey6%(EcLEvh{u)be#Hf$0zDpLpy759ULlp+ z3KNGae2w04y#X8g{*pkGeyFf`H?&(Fd66K)wpnbSj5&FGXDAd+YO~tixTzshxBEWd zTbx=rHvTxKjDjoc$}!K4hZb)>@Dq*qIu?IL0%GZ1aD(v3hYrrmedrx6rs`Z1=7wDC zg?XKR0=03(X+7oZX^G4b7}rb%l7iMF6Mmp#H<{oM%OQMwM}*auoralFUv`WFJiROn z1fw?E{5Zz@eE~!4k;z@$>!zlr9l~WAQ|mJaTjuSUoUCm3DSfeQD9(CY|HPXNoZI|& z#(h~SS!3SbsUdQKW4!h@#;%!jw;zb;F-6wv&uBR=XHn&@{=}xm^H}IU*OyW5Ue8jM z4T>VD5G8+#NMI7Un0xVN93>6=H1Jo^XQSsI8yFa{-eutkguZCWNDQy2>X!Zq!T2>2 zf>Oq7YjFp|bzID4Z;h_6U3`=y>SrT zZwLo)$V;e_aUf0G?a17hZErZFH9t-?18Y=L2(9u(aaT%tue(2VN@E=Q9EvD|rx``E za3a8>cn2`YiM9Rsqg#;`MExpwdSR+?17`PrV?k061n2# zbp%0z8uS%PR#v7VAR({;YQXV`x#FoakZt)fXWqf?{h~D^^D#|Qisdmw01rG0_{MVDoe$PX;n9%U3c>Qr5v1 zuebc#z+iR!P&F0Rqd8PFUhBj!`0qyIHMG1tW1;2_YFv#@ulJ3f9J{|@X2ML-{Q#R! zpa1ZHe_-=pKs))5nRD~$w<_CuHeH*)@!Ne4v48ewcw^+z6J;3P-|QurblPfXbVWW; zc(MKVGbyauBSOoobeQGIkDB!A0d(~$?RzQp)q;E3{Bi zedufaoM4u@jVnIqO+~Gi zE2J;W-%9F5mW4QQU+UZS7`iTwba#r-jLOyHTau4gxar%~v=doQPREeW^Fe){8m;;& zuc^~qE1yZrw_vfYhPrzCxNMSLFWvO{VLJg4VFet{94*kxeIo95z|EHkh&Re|T`HX?0Z#Rc{Jjd~zr? z@<5SXYi~18Ig++QN-dK%yAeh-|Hv-A>Rqr}W7Xj5lbefDC*_(8VQcI4w7$vweuY`p_w#{acl+-TjL zY!P?)`drgk;Y^WT!vhpeT##sVqH_{Wba{Nx@``}y5WjXUiO|z`xia0gwgNqn z`}HjswB}1vWngxU$RXlI&w9hF%6@0Px^nPnzoZ%WotO+-S2cbam7mVrmb7em+obPa z`;ZmkhfCUYQEPvu7mgn_Y;0fd*NY9o_7Uu4?1K|k@s9bk6@4+sy<>V8+C7ut)9-OA z`u1`M1#HuDy^y7bvAmRx?_-4_q3L9ncj5Iz@SW*2VUN+$glXeU`PftLo-ldKU=L5- z=L6x{q=+6p&To~syZX?w*vdkAL@g;Xl;1I{z<{SxTDApm+g4eKd}31GHzijkOAQ`b zuvnB(pgI(t@Un>5wQ@3FfEW&CBkKee9CKR+ZYiXe-=VgBDl&+U+nt&DKeat=13Q@?XAuiO84mdS6jcb(4q$HNDi26Q~8X zA1yh>ybOI?4v!<9ghG2|IvsP0_P}E#mt$59tY}Prg%y3D4HZpm;!SS6%{$)@XL4;? z{UYJlGOiBYE^K$z5$VPyaBVE2+tXA%naSb2qNDcpyL=YcXGh0UEYb?()Giu97*$Dk z@V6aJGwnzw3EgHsX68OoN)k z3tDBD=l^jHn9U<(Kw9n>Gk?9j5qcj6id}IxdywJbDHo-F@|1u$zOzLLh!>LWdfA@| zI9soD<^R@90<67qp3WIXk00BW-;FNCU!#i+--s4k%}DOD9swg0zibVsfXndtp0Fwq_qd`J7+3$Cq$ zQqq@oqmf3G^xkT2mA@}&)FE6{Mi+a?KI8twR5Xcs}4ie%M zJ9+Z2up3X8WzmCU)#oqtab{T(w2|EM<)iqA2e|2y7A1qJETRy5l_hUST%O#u-Jtau z-2J3O8_vvq3aD6sUdx>Z+oDk(85>GIG}W-ED@OI+kNdAf%sve#)SD-`{Xl(rnI{{s zdq6L^V!qEF39)WX9=1;YtdOeW`oem$Pgbg8PBx^kMEaWz7UbFI;F_d@A(Q*mmR#vo zDq+*c5z4OFJAAVbt`b%UKD`qe0vR}kYeE4rTK0hmKJyMOILQBZWvaR>ftFf>e+9Bq zIDIw7z!c`;@mjX%Rg9`gJ1ycwlR~38nhs%XZH~3oG9{f%M?Jn4#IJ_qo1S1O0j~Iz z!s3FTs3(V#`bY__s>PQig7W>^MEH|Zu&SSucGjqKsSV^?5fG4PO~bj%QhIH$Vwjy_ zQL?-P=9_0wi}~1Wm_ohUvS}EjZP!NCS-ZO@p(1eZo=IA{p=o8?%ZdC&X?3g2Zm~uA zLWJGe9p%lQ-J0WbLb*x}9|#6Lf^t%dLzNxmsZl2Tm$H28ECmWd33q&X*^_P7&kv!c(bW=W5fd zba#+AW1qI30dxs_a#bSp6`{=g)n3`OA@tMh2O|SgmWwBSJ*m?svUpz%yxBA+errx9 z2bctGhd-QP*17)$sQjzVYWqm<|CI#&-~YW|`~UfBmH&ME2?q;F^N1lnq?>XcInp{2 zDD(F@6ZmBd*J4~B4Vgw6Pqe%5f`uBs7UKok)!)yhrAwfR9=O*P!M1zU0|2Y?5&*)F zqKHj3+ybD(7#M@lgf9vleKClIjxyg!mIhi&F zq{6VZ(t-4zOK}yiO=IwFeM7@wB0{*ZxFI7S$e8ueH6?-znlWCXPozvU3Cpib(e`Z= zyjKnzcvsIJ1UN`=tQ1c(8#F3?%WczGTr}U>sbuur`ZGmTsYBUNQJGyT;o{Dhlu~l9 z%@LsPSN +
      +

      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 }} +
      + +
      +

      + {{ .Title }} +

      + +
      + +
      +
      + {{ .Summary }} +
      +
      + {{ 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 }} +
      + {{ range $name, $path := $.Param "socialOptions" }} + {{ if (and $path (ne $name "email")) }} + + {{ partial (print "svgs/social/" $name ".svg") (dict "width" 25 "height" 25) }} + + {{ end }} + {{ 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 }} +
      +
      + +
      {{ .Params.icon }}
      +

      {{ .Title }}

      +
      +
      {{ .Params.description }}
      +
      +
      + Source +
      +
      + {{ 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 }} + +
      +
      +

      {{ .Title }}

      +

      + {{ len $pages }} posts found. +

      +
      +
      + +
      +
      +
      +
      +
      + {{ range $pages }} +
      + +
      + +

      {{ .Title }}

      +
      + +
      +
      + {{ 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 }} +
      +
      + +
      + {{ if .Section }} + + {{ end }} +
      + + +{{ 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 }} + +
      +
      +

      {{ .Title }}

      +
      +
      + +
      +
      +
      + {{ range (index .Site.Taxonomies (.Title | lower)) }} + {{ .Page.Title }} {{ .Count }} + {{ end }} +
      +
      +
      + +{{ 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 @@ +
      +
      + +
      + {{- if and (or .Params.mathjax (and .Site.Params.mathjax (ne .Params.mathjax false))) (or .IsPage .IsHome) }} + + + {{- end }} + {{ $features := resources.Get "js/features.js" | minify | fingerprint }} + +
      \ 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) {}