saving changes to pb

This commit is contained in:
xuu 2025-03-26 18:49:42 -06:00
parent 41aa46ce83
commit fb10041e71
Signed by: xuu
GPG Key ID: 8B3B0604F164E04F
18 changed files with 1021 additions and 321 deletions

View File

@ -2,7 +2,7 @@ all: avro flatbuffers protobuf
avro: twt-avro/gen.go
twt-avro/gen.go: lextwt.avro
go tool avro gen -pkg twt_avro -encoders lextwt.avro > twt-avro/gen.go
go tool avrogen -pkg twt_avro -encoders lextwt.avro > twt-avro/gen.go
flatbuffers: twt-fbs/lextwt

23
go.mod
View File

@ -10,25 +10,25 @@ tool (
google.golang.org/protobuf/cmd/protoc-gen-go
)
require github.com/hamba/avro/v2 v2.28.0
require (
github.com/davecgh/go-spew v1.1.1
github.com/google/flatbuffers v25.2.10+incompatible
github.com/hamba/avro/v2 v2.28.0
go.yarn.social/types v0.0.0-20250108134258-ed75fa653ede
)
require (
github.com/SpirentOrion/go-avrogrpc v0.0.0-20201103153720-fba312c1a9f5 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/ettle/strcase v0.2.0 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/flatbuffers v25.2.10+incompatible // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/linkedin/goavro/v2 v2.9.8 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/writeas/go-strip-markdown/v2 v2.1.1 // indirect
go.yarn.social/types v0.0.0-20250108134258-ed75fa653ede // indirect
golang.org/x/crypto v0.33.0 // indirect
golang.org/x/crypto v0.36.0 // indirect
golang.org/x/mod v0.23.0 // indirect
golang.org/x/tools v0.30.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
require (
@ -69,13 +69,12 @@ require (
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/samber/lo v1.49.1 // indirect
github.com/stretchr/testify v1.10.0
go.yarn.social/lextwt v0.1.4
golang.org/x/arch v0.14.0 // indirect
golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac // indirect
golang.org/x/net v0.35.0 // indirect
golang.org/x/sync v0.11.0 // indirect
golang.org/x/sys v0.30.0 // indirect
golang.org/x/text v0.22.0 // indirect
google.golang.org/protobuf v1.36.5 // indirect
golang.org/x/sync v0.12.0 // indirect
golang.org/x/sys v0.31.0 // indirect
golang.org/x/text v0.23.0 // indirect
google.golang.org/protobuf v1.36.5
)

39
go.sum
View File

@ -10,10 +10,16 @@ github.com/ZxillyFork/gosym v0.0.0-20240510024817-deed2b882525 h1:JtN7QBnRxeyMvD
github.com/ZxillyFork/gosym v0.0.0-20240510024817-deed2b882525/go.mod h1:AC2xDL/KBa60pBB/m0zRCDCGvzLrMkmW/aY0q+uThFE=
github.com/ZxillyFork/trie v0.0.0-20240512061834-f75150731646 h1:Mkm17zXN+CiAXdV9/7mdCUGuEzlUNu73mB6En++kUkE=
github.com/ZxillyFork/trie v0.0.0-20240512061834-f75150731646/go.mod h1:wbU6+GbSHDwVSMpzFyOVrX/WdFHXH4j7j8Rg8rbyo+4=
github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
github.com/alecthomas/kong v1.8.1 h1:6aamvWBE/REnR/BCq10EcozmcpUPc5aGI1lPAWdB0EE=
github.com/alecthomas/kong v1.8.1/go.mod h1:p2vqieVMeTAnaC83txKtXe8FLke2X07aruPWXyMPQrU=
github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc=
github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWpi6yML8=
github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA=
github.com/blacktop/go-dwarf v1.0.10 h1:i9zYgcIROETsNZ6V+zZn3uDH21FCG5BLLZ837GitxS0=
github.com/blacktop/go-dwarf v1.0.10/go.mod h1:4W2FKgSFYcZLDwnR7k+apv5i3nrau4NGl9N6VQ9DSTo=
github.com/blacktop/go-macho v1.1.238 h1:OFfT6NB/SWxkoky7L/ytuY8QekgFpa9pmz/GHUQLsmM=
@ -27,6 +33,10 @@ github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O
github.com/charmbracelet/lipgloss v1.0.0/go.mod h1:U5fy9Z+C38obMs+T+tJqst9VGzlOYGj4ri9reL3qUlo=
github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
github.com/charmbracelet/x/exp/golden v0.0.0-20250213125511-a0c32e22e4fc h1:Tp8vprGbBhTAeyCNgrWPYIPyVEo9qmFRAcRhSdeind4=
github.com/charmbracelet/x/exp/golden v0.0.0-20250213125511-a0c32e22e4fc/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
github.com/charmbracelet/x/exp/teatest v0.0.0-20250213125511-a0c32e22e4fc h1:p4x5lOqNZEELobbdrm00kW5xrQwXZtIrUW8yTPK16aU=
github.com/charmbracelet/x/exp/teatest v0.0.0-20250213125511-a0c32e22e4fc/go.mod h1:ag+SpTUkiN/UuUGYPX3Ci4fR1oF3XX97PpGhiXK7i6U=
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
@ -60,8 +70,8 @@ github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6F
github.com/google/flatbuffers v25.2.10+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/hamba/avro v1.8.0 h1:eCVrLX7UYThA3R3yBZ+rpmafA5qTc3ZjpTz6gYJoVGU=
@ -73,6 +83,8 @@ github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/jedib0t/go-pretty/v6 v6.6.6 h1:LyezkL+1SuqH2z47e5IMQkYUIcs2BD+MnpdPRiRcN0c=
github.com/jedib0t/go-pretty/v6 v6.6.6/go.mod h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@ -123,6 +135,8 @@ github.com/samber/lo v1.49.1/go.mod h1:dO6KHFzUKXgP8LDhU0oI8d2hekjXnGOu0DB8Jecxd
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
@ -131,10 +145,6 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/writeas/go-strip-markdown/v2 v2.1.1 h1:hAxUM21Uhznf/FnbVGiJciqzska6iLei22Ijc3q2e28=
github.com/writeas/go-strip-markdown/v2 v2.1.1/go.mod h1:UvvgPJgn1vvN8nWuE5e7v/+qmDu3BSVnKAB6Gl7hFzA=
go.yarn.social/lextwt v0.1.1 h1:afyIZGvHBOZ81LD1OVg9wzP032+9sEihEHX7IdHkkPg=
go.yarn.social/lextwt v0.1.1/go.mod h1:JOPCOh+3bHv+BMaFZpKzw6soiXbIlZD5b2f7YKDDjqk=
go.yarn.social/lextwt v0.1.2 h1:hQYWMJmH2ziKsbFtqpf1eylGKq+CDSeQNtRW3rYL+kM=
go.yarn.social/lextwt v0.1.2/go.mod h1:JOPCOh+3bHv+BMaFZpKzw6soiXbIlZD5b2f7YKDDjqk=
go.yarn.social/lextwt v0.1.4 h1:3p3GNzIcumDk+hwBHT8F0ySAcdPpP/wQz2WnczSTv+o=
go.yarn.social/lextwt v0.1.4/go.mod h1:JOPCOh+3bHv+BMaFZpKzw6soiXbIlZD5b2f7YKDDjqk=
go.yarn.social/types v0.0.0-20250108134258-ed75fa653ede h1:XV9tuDQ605xxH4qIQPRHM1bOa7k0rJZ2RqA5kz2Nun4=
@ -142,8 +152,8 @@ go.yarn.social/types v0.0.0-20250108134258-ed75fa653ede/go.mod h1:+xnDkQ0T0S8emx
golang.org/x/arch v0.14.0 h1:z9JUEZWr8x4rR0OU6c4/4t6E6jOZ8/QBS2bBYBm4tx4=
golang.org/x/arch v0.14.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus=
golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M=
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac h1:l5+whBCLH3iH2ZNHYLbAe58bo7yrN4mVcnkHDYz5vvs=
golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac/go.mod h1:hH+7mtFmImwwcMvScyxUhjuVHR3HGaDPMn9rMSUUbxo=
@ -162,26 +172,25 @@ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAG
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY=
golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=

6
go.work Normal file
View File

@ -0,0 +1,6 @@
go 1.24.0
use (
.
../go-lextwt
)

62
go.work.sum Normal file
View File

@ -0,0 +1,62 @@
dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0=
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
github.com/badgerodon/ioutil v0.0.0-20150716134133-06e58e34b867/go.mod h1:Ctq1YQi0dOq7QgBLZZ7p1Fr3IbAAqL/yMqDIHoe9WtE=
github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
github.com/cilium/ebpf v0.11.0/go.mod h1:WE7CZAnqOL2RouJ4f1uyNhqr2P4CCvXFIqdRDUgWsVs=
github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
github.com/cosiner/argv v0.1.0/go.mod h1:EusR6TucWKX+zFgtdUsKT2Cvg45K5rtpCcWz4hK06d8=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.20/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/cyphar/filepath-securejoin v0.3.4/go.mod h1:8s/MCNJREmFK0H02MF6Ihv1nakJe4L/w3WZLHNkvlYM=
github.com/derekparker/trie v0.0.0-20230829180723-39f4de51ef7d/go.mod h1:C7Es+DLenIpPc9J6IYw4jrK0h7S9bKj4DNl8+KxGEXU=
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
github.com/felixge/fgprof v0.9.5/go.mod h1:yKl+ERSa++RYOs32d8K6WEXCB4uXdLls4ZaZPpayhMM=
github.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62/go.mod h1:biJCRbqp51wS+I92HMqn5H8/A0PAhxn2vyOT+JqhiGI=
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow=
github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/google/go-dap v0.12.0/go.mod h1:tNjCASCm5cqePi/RVXXWEVqtnNLV1KTWtYOqu6rZNzc=
github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sahilm/fuzzy v0.1.1/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y=
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M=
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.starlark.net v0.0.0-20231101134539-556fd59b42f6/go.mod h1:LcLNIzVOMp4oV+uusnpk+VU+SzXaJakUuBjoCSWH5dM=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0=
golang.org/x/telemetry v0.0.0-20241106142447-58a1122356f5/go.mod h1:8nZWdGp9pq73ZI//QJyckMQab3yq7hoWi7SI0UIusVI=
golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=

Binary file not shown.

236
lextwt.avpr Normal file
View File

@ -0,0 +1,236 @@
{
"namespace": "social.yarn.lextwt",
"protocol": "Twtxt",
"doc": "Protocol Twtxt",
"messages": {
}
"types": [
{
"type": "record",
"name": "registry",
"fields": [
{
"name":"twts",
"type":{
"type":"array",
"items": {
"type": "record",
"name": "twt",
"fields": [
{
"name": "nick",
"type": "string"
},
{
"name": "uri",
"type": "string"
},
{
"name": "created",
"type": "long",
"logicalType": "timestamp-millis"
},
{
"name": "createdZone",
"type": "string"
},
{
"name": "createdOffset",
"type": "int"
},
{
"name": "msg",
"type": {
"type": "array",
"items": {
"name": "elem",
"type": [
"null",
"string",
{
"type": "record",
"name": "linesep",
"fields": []
},
{
"type": "record",
"name": "comment",
"fields": [
{
"name": "comment",
"type": "string"
},
{
"name": "key",
"type": "string"
},
{
"name": "value",
"type": "string"
}
]
},
{
"type": "record",
"name": "mention",
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "domain",
"type": "string"
},
{
"name": "target",
"type": "string"
}
]
},
{
"type": "record",
"name": "bangmention",
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "target",
"type": "string"
}
]
},
{
"type": "record",
"name": "hashtag",
"fields": [
{
"name": "tag",
"type": "string"
},
{
"name": "target",
"type": "string"
}
]
},
{
"type": "record",
"name": "subject",
"fields": [
{
"name": "subject",
"type": "string"
},
{
"name": "tag",
"type": "string"
},
{
"name": "target",
"type": "string"
}
]
},
{
"type": "record",
"name": "link",
"fields": [
{
"name": "linkType",
"type": "int",
"logicalType": "int8"
},
{
"name": "text",
"type": "string"
},
{
"name": "target",
"type": "string"
},
{
"name": "title",
"type": "string"
}
]
},
{
"type": "record",
"name": "code",
"fields": [
{
"name": "code",
"type": "string"
},
{
"name": "codetype",
"type": "int",
"logicalType": "int8"
}
]
}
]
}
}
}
]
}
}
},
{
"name": "preamble",
"type": {
"type":"array",
"items": "social.yarn.lextwt.comment"
}
}
]
},
{
"type": "record",
"name": "feed",
"fields": [
{
"name": "twter",
"type": {
"type": "record",
"name": "twter",
"fields": [
{
"name": "nick",
"type": "string"
},
{
"name": "uri",
"type": "string"
}
]
}
},
{
"name": "preamble",
"type": {
"type":"array",
"items": "social.yarn.lextwt.comment"
}
},
{
"name": "twts",
"type": "social.yarn.lextwt.twts"
}
]
}
],
}

View File

@ -1,4 +1,4 @@
{
[{
"type": "record",
"name": "registry",
"namespace": "social.yarn.lextwt",
@ -175,28 +175,6 @@
}
},
{
"name":"twters",
"type":{
"type": "array",
"items": {
"name": "twter",
"type":"record",
"fields":[
{
"name": "nick",
"type": "string"
},
{
"name": "uri",
"type": "string"
}
]
}
}
},
{
"name": "preamble",
"type": {
@ -206,4 +184,44 @@
}
]
},
{
"type": "record",
"name": "feed",
"fields": [
{
"name": "twter",
"type": {
"type": "record",
"name": "twter",
"fields": [
{
"name": "nick",
"type": "string"
},
{
"name": "uri",
"type": "string"
}
]
}
},
{
"name": "preamble",
"type": {
"type":"array",
"items": "social.yarn.lextwt.comment"
}
},
{
"name": "twts",
"type": {
"type": "array",
"items": "social.yarn.lextwt.twt"
}
}
]
}
]

View File

@ -2,7 +2,12 @@ namespace lextwt;
table TwtRegistry {
preamble:[Comment];
twters:[Twter];
twts:[Twt];
}
table TwtFeed {
twter:Twter;
preamble:[Comment];
twts:[Twt];
}

View File

@ -4,13 +4,20 @@ option go_package = "go.sour.is/lextwt-proto/pb";
service TwtRegistryService {
rpc latestTwts (LatestTwts) returns (TwtRegistry);
rpc users (Pager) returns (TwtRegistry);
}
message LatestTwts {}
message Pager {}
message TwtRegistry {
repeated Comment preamble = 1;
repeated Twter twters = 2;
repeated Twt twts = 3;
}
message TwtFeed {
Twter twter = 2;
repeated Comment preamble = 1;
repeated Twt twts = 3;
}

20
test.txt Normal file
View File

@ -0,0 +1,20 @@
marado https://tilde.pt/~marado/twtxt.txt 2025-03-07T21:28:04Z (#114123268718308452) First #FridayReads of #MarchMysteryMadness #2025 with Stephen Chance's "Septimus and the Minster Ghost" - the second in the series - in a Faber Finds edition. ![Stephen Chance's "Septimus and the Minster Ghost" in a Faber Finds edition: White cover, grey text surrounded by a red frame.](https://media.ciberlandia.pt/ciberlandia-media/media_attachments/files/114/123/256/548/807/431/original/f3b7dc96fb80186d.jpg)
andros https://twtxt.andros.dev 2025-03-07T16:46:53+01:00 (#6c3lbxa) @<prologic https://twtxt.net/user/prologic/twtxt.txt> Thank you 😁
movq https://www.uninformativ.de/twtxt.txt 2025-03-07T14:14:24+00:00 (#xsrxvgq) @<lyse https://lyse.isobeef.org/twtxt.txt> Oh, so *thats* the problem! 😅
movq https://www.uninformativ.de/twtxt.txt 2025-03-07T14:12:40+00:00 (#rudviwq) @<prologic https://twtxt.net/user/prologic/twtxt.txt> Brace for impact. 🫣 How stormy is it at the moment?
andros https://twtxt.andros.dev 2025-03-07T14:47:32+01:00 You can find the #twtxt-el channel in Libera IRC to talk about the twtxt.el client, I will keep my connection open so you can ask me questions. Thank you!
andros https://twtxt.andros.dev 2025-03-07T14:47:32+01:00 You can find the #twtxt-el channel in Libera IRC to talk about the twtxt.el client, I will keep my connection open so you can ask me questions. Thank you!
andros https://twtxt.andros.dev 2025-03-06T15:07:10+01:00 Hacer software código opensource es desafiante y paulatinamente desgasta a su autor. Todo comienza con pasión y entusiasmo, por supuesto. Si logras repercusión, te enfrentas a una carrera de fondo que muchos terminan abandonando por las demandas constantes de usuarios que, a menudo, no valoran el trabajo ni contribuyen de manera significativa. Por mencionar un caso reciente: Hector Martin. Líder del proyecto Asahi Linux, quien dedicó años a adaptar Linux para los procesadores Apple Silicon, un logro técnico impresionante. Sin embargo, terminó renunciando debido a la presión de usuarios que exigían soporte y mejoras como si fueran clientes pagos.La mayoría de los mantenedores no reciben ningún soporte económico. Solo unos pocos proyectos logran sostenibilidad financiera a través de patrocinios, mientras que la mayoría de los desarrolladores terminan con un segundo empleo no remunerado.Sin un cambio en la forma en que se valora y apoya los proyectos Opensource, y no solo hablo de las grandes empresas multimillonarias. Sería una perdida para todos si acabaremos con un ecosistema de software archivado y abandonado.Ahora te paso la pelota a ti, ¿cuando fue la última vez que apoyaste a un mantenedor de software opensource?#opensource #software #sostenibilidad
andros https://twtxt.andros.dev 2025-03-06T15:07:10+01:00 Hacer software código opensource es desafiante y paulatinamente desgasta a su autor. Todo comienza con pasión y entusiasmo, por supuesto. Si logras repercusión, te enfrentas a una carrera de fondo que muchos terminan abandonando por las demandas constantes de usuarios que, a menudo, no valoran el trabajo ni contribuyen de manera significativa. Por mencionar un caso reciente: Hector Martin. Líder del proyecto Asahi Linux, quien dedicó años a adaptar Linux para los procesadores Apple Silicon, un logro técnico impresionante. Sin embargo, terminó renunciando debido a la presión de usuarios que exigían soporte y mejoras como si fueran clientes pagos.La mayoría de los mantenedores no reciben ningún soporte económico. Solo unos pocos proyectos logran sostenibilidad financiera a través de patrocinios, mientras que la mayoría de los desarrolladores terminan con un segundo empleo no remunerado.Sin un cambio en la forma en que se valora y apoya los proyectos Opensource, y no solo hablo de las grandes empresas multimillonarias. Sería una perdida para todos si acabaremos con un ecosistema de software archivado y abandonado.Ahora te paso la pelota a ti, ¿cuando fue la última vez que apoyaste a un mantenedor de software opensource?#opensource #software #sostenibilidad
andros https://twtxt.andros.dev 2025-03-06T15:07:10+01:00 Hacer software código opensource es desafiante y paulatinamente desgasta a su autor. Todo comienza con pasión y entusiasmo, por supuesto. Si logras repercusión, te enfrentas a una carrera de fondo que muchos terminan abandonando por las demandas constantes de usuarios que, a menudo, no valoran el trabajo ni contribuyen de manera significativa. Por mencionar un caso reciente: Hector Martin. Líder del proyecto Asahi Linux, quien dedicó años a adaptar Linux para los procesadores Apple Silicon, un logro técnico impresionante. Sin embargo, terminó renunciando debido a la presión de usuarios que exigían soporte y mejoras como si fueran clientes pagos.La mayoría de los mantenedores no reciben ningún soporte económico. Solo unos pocos proyectos logran sostenibilidad financiera a través de patrocinios, mientras que la mayoría de los desarrolladores terminan con un segundo empleo no remunerado.Sin un cambio en la forma en que se valora y apoya los proyectos Opensource, y no solo hablo de las grandes empresas multimillonarias. Sería una perdida para todos si acabaremos con un ecosistema de software archivado y abandonado.Ahora te paso la pelota a ti, ¿cuando fue la última vez que apoyaste a un mantenedor de software opensource?#opensource #software #sostenibilidad
marado https://tilde.pt/~marado/twtxt.txt 2025-03-06T13:13:12Z (#114115660534785350) Palavras de Francisco Ferreira na mais recente newsletter da #ZERO :"Há poucas semanas, esta nova Comissão (apesar da mesma Presidente Ursula von der Leyen), apresentou o chamado pacote legislativo “omnibus”. [...]A proposta #Omnibus pretende alterar três pilares fundamentais do Pacto Ecológico Europeu - a Diretiva de Dever de Diligência das Empresas em Sustentabilidade (#CSDDD), a Diretiva de Comunicação de Informações de Sustentabilidade das Empresas (#CSRD) e o Regulamento de Taxonomia. Tal pode comprometer os objetivos climáticos e sociais da União Europeia. O argumento da simplificação regulatória, usado pela Comissão Europeia, vai, na prática, resultar no enfraquecimento de regras fundamentais que garantem transparência empresarial, redução de emissões e proteção dos direitos humanos nas cadeias de fornecimento globais. Além disso, essa revisão legislativa ameaça as empresas que já investiram na transição sustentável, favorecendo aquelas que ainda não se adaptaram às exigências ambientais e sociais.Quando a Europa deveria ser um farol à escala mundial, num mundo ameaçado por enormes crises ambientais, estamos afinal a retroceder em áreas fundamentais para o futuro."
marado https://tilde.pt/~marado/twtxt.txt 2025-03-06T13:05:47Z (#114115631334402672) Para a #musiquinta de #carnaval uma foto mas sem link, que não encontro estas músicas online."Gande Carnaval de Verão 1974" é um disco de Carnaval em que as letras foram alteradas para promover a #Tupperware :-P ![Foto do disco a ser tocado](https://media.ciberlandia.pt/ciberlandia-media/media_attachments/files/114/115/614/919/612/153/original/98558d2340e827d4.jpg)
marado https://tilde.pt/~marado/twtxt.txt 2025-03-05T23:05:35Z (#114112327569583065) Já se percebeu que o CDS quer voltar a ir a votos coligado com o PSD, em Maio, mas a grande questão política do momento agora é: será que o PPM continua a querer apoiar Montenegro?#ptpol
movq https://www.uninformativ.de/twtxt.txt 2025-03-05T19:00:22+00:00 (#myrrq6q) @<eapl.me https://eapl.me/tw.txt> Great, thanks for organizing this! 👍
movq https://www.uninformativ.de/twtxt.txt 2025-03-05T18:59:09+00:00 (#xsrxvgq) @<lyse https://lyse.isobeef.org/twtxt.txt> No, its always in the shadow. But theres not a lot of wind, maybe other things around it heat up … 🤔
andros https://twtxt.andros.dev 2025-03-05T18:23:59+01:00 I have released new updates to the twtxt.el client.- New feature: View and interact with threads.- Optimisation of ordering for long feeds.- Minor fixes.In the next version you will be able to see all your mentions.Enjoy!#emacs #twtxt #twtxtel![](https://activity.andros.dev/fileserver/01FQ7FH7RWJCEWS8FG7N1W26TX/attachment/original/01JNKN0KX74P6RFBH07V7E7ZBM.mp4)
andros https://twtxt.andros.dev 2025-03-05T18:23:59+01:00 I have released new updates to the twtxt.el client.- New feature: View and interact with threads.- Optimisation of ordering for long feeds.- Minor fixes.In the next version you will be able to see all your mentions.Enjoy!#emacs #twtxt #twtxtel![](https://activity.andros.dev/fileserver/01FQ7FH7RWJCEWS8FG7N1W26TX/attachment/original/01JNKN0KX74P6RFBH07V7E7ZBM.mp4)
andros https://twtxt.andros.dev 2025-03-05T18:23:59+01:00 I have released new updates to the twtxt.el client.- New feature: View and interact with threads.- Optimisation of ordering for long feeds.- Minor fixes.In the next version you will be able to see all your mentions.Enjoy!#emacs #twtxt #twtxtel![](https://activity.andros.dev/fileserver/01FQ7FH7RWJCEWS8FG7N1W26TX/attachment/original/01JNKN0KX74P6RFBH07V7E7ZBM.mp4)
andros https://twtxt.andros.dev 2025-03-05T18:23:59+01:00 I have released new updates to the twtxt.el client.- New feature: View and interact with threads.- Optimisation of ordering for long feeds.- Minor fixes.In the next version you will be able to see all your mentions.Enjoy!#emacs #twtxt #twtxtel![](https://activity.andros.dev/fileserver/01FQ7FH7RWJCEWS8FG7N1W26TX/attachment/original/01JNKN0KX74P6RFBH07V7E7ZBM.mp4)
andros https://twtxt.andros.dev 2025-03-05T18:10:21+01:00 (#rudviwq) Oh my god! 😵
andros https://twtxt.andros.dev 2025-03-05T18:10:21+01:00 (#rudviwq) Oh my god! 😵

View File

@ -219,13 +219,36 @@ func (o *Twt) Marshal() ([]byte, error) {
return avro.Marshal(o.Schema(), o)
}
// Registry is a generated struct.
type Registry struct {
Twts []Twt `avro:"twts"`
Preamble []Comment `avro:"preamble"`
}
var schemaRegistry = avro.MustParse(`{"name":"social.yarn.lextwt.registry","type":"record","fields":[{"name":"twts","type":{"type":"array","items":{"name":"social.yarn.lextwt.twt","type":"record","fields":[{"name":"nick","type":"string"},{"name":"uri","type":"string"},{"name":"created","type":"long"},{"name":"createdZone","type":"string"},{"name":"createdOffset","type":"int"},{"name":"msg","type":{"type":"array","items":["null","string",{"name":"social.yarn.lextwt.linesep","type":"record","fields":[]},{"name":"social.yarn.lextwt.comment","type":"record","fields":[{"name":"comment","type":"string"},{"name":"key","type":"string"},{"name":"value","type":"string"}]},{"name":"social.yarn.lextwt.mention","type":"record","fields":[{"name":"name","type":"string"},{"name":"domain","type":"string"},{"name":"target","type":"string"}]},{"name":"social.yarn.lextwt.bangmention","type":"record","fields":[{"name":"name","type":"string"},{"name":"target","type":"string"}]},{"name":"social.yarn.lextwt.hashtag","type":"record","fields":[{"name":"tag","type":"string"},{"name":"target","type":"string"}]},{"name":"social.yarn.lextwt.subject","type":"record","fields":[{"name":"subject","type":"string"},{"name":"tag","type":"string"},{"name":"target","type":"string"}]},{"name":"social.yarn.lextwt.link","type":"record","fields":[{"name":"linkType","type":"int"},{"name":"text","type":"string"},{"name":"target","type":"string"},{"name":"title","type":"string"}]},{"name":"social.yarn.lextwt.code","type":"record","fields":[{"name":"code","type":"string"},{"name":"codetype","type":"int"}]}]}}]}}},{"name":"preamble","type":{"type":"array","items":"social.yarn.lextwt.comment"}}]}`)
// Schema returns the schema for Registry.
func (o *Registry) Schema() avro.Schema {
return schemaRegistry
}
// Unmarshal decodes b into the receiver.
func (o *Registry) Unmarshal(b []byte) error {
return avro.Unmarshal(o.Schema(), b, o)
}
// Marshal encodes the receiver.
func (o *Registry) Marshal() ([]byte, error) {
return avro.Marshal(o.Schema(), o)
}
// Twter is a generated struct.
type Twter struct {
Nick string `avro:"nick"`
URI string `avro:"uri"`
}
var schemaTwter = avro.MustParse(`{"name":"social.yarn.lextwt.twter","type":"record","fields":[{"name":"nick","type":"string"},{"name":"uri","type":"string"}]}`)
var schemaTwter = avro.MustParse(`{"name":"twter","type":"record","fields":[{"name":"nick","type":"string"},{"name":"uri","type":"string"}]}`)
// Schema returns the schema for Twter.
func (o *Twter) Schema() avro.Schema {
@ -242,26 +265,26 @@ func (o *Twter) Marshal() ([]byte, error) {
return avro.Marshal(o.Schema(), o)
}
// Registry is a generated struct.
type Registry struct {
Twts []Twt `avro:"twts"`
Twters []Twter `avro:"twters"`
// Feed is a generated struct.
type Feed struct {
Twter Twter `avro:"twter"`
Preamble []Comment `avro:"preamble"`
Twts []Twt `avro:"twts"`
}
var schemaRegistry = avro.MustParse(`{"name":"social.yarn.lextwt.registry","type":"record","fields":[{"name":"twts","type":{"type":"array","items":{"name":"social.yarn.lextwt.twt","type":"record","fields":[{"name":"nick","type":"string"},{"name":"uri","type":"string"},{"name":"created","type":"long"},{"name":"createdZone","type":"string"},{"name":"createdOffset","type":"int"},{"name":"msg","type":{"type":"array","items":["null","string",{"name":"social.yarn.lextwt.linesep","type":"record","fields":[]},{"name":"social.yarn.lextwt.comment","type":"record","fields":[{"name":"comment","type":"string"},{"name":"key","type":"string"},{"name":"value","type":"string"}]},{"name":"social.yarn.lextwt.mention","type":"record","fields":[{"name":"name","type":"string"},{"name":"domain","type":"string"},{"name":"target","type":"string"}]},{"name":"social.yarn.lextwt.bangmention","type":"record","fields":[{"name":"name","type":"string"},{"name":"target","type":"string"}]},{"name":"social.yarn.lextwt.hashtag","type":"record","fields":[{"name":"tag","type":"string"},{"name":"target","type":"string"}]},{"name":"social.yarn.lextwt.subject","type":"record","fields":[{"name":"subject","type":"string"},{"name":"tag","type":"string"},{"name":"target","type":"string"}]},{"name":"social.yarn.lextwt.link","type":"record","fields":[{"name":"linkType","type":"int"},{"name":"text","type":"string"},{"name":"target","type":"string"},{"name":"title","type":"string"}]},{"name":"social.yarn.lextwt.code","type":"record","fields":[{"name":"code","type":"string"},{"name":"codetype","type":"int"}]}]}}]}}},{"name":"twters","type":{"type":"array","items":{"name":"social.yarn.lextwt.twter","type":"record","fields":[{"name":"nick","type":"string"},{"name":"uri","type":"string"}]}}},{"name":"preamble","type":{"type":"array","items":"social.yarn.lextwt.comment"}}]}`)
var schemaFeed = avro.MustParse(`{"name":"feed","type":"record","fields":[{"name":"twter","type":{"name":"twter","type":"record","fields":[{"name":"nick","type":"string"},{"name":"uri","type":"string"}]}},{"name":"preamble","type":{"type":"array","items":"social.yarn.lextwt.comment"}},{"name":"twts","type":{"type":"array","items":"social.yarn.lextwt.twt"}}]}`)
// Schema returns the schema for Registry.
func (o *Registry) Schema() avro.Schema {
return schemaRegistry
// Schema returns the schema for Feed.
func (o *Feed) Schema() avro.Schema {
return schemaFeed
}
// Unmarshal decodes b into the receiver.
func (o *Registry) Unmarshal(b []byte) error {
func (o *Feed) Unmarshal(b []byte) error {
return avro.Unmarshal(o.Schema(), b, o)
}
// Marshal encodes the receiver.
func (o *Registry) Marshal() ([]byte, error) {
func (o *Feed) Marshal() ([]byte, error) {
return avro.Marshal(o.Schema(), o)
}

View File

@ -22,6 +22,8 @@ const (
keyTwt = "social.yarn.lextwt.twt"
keyTwter = "social.yarn.lextwt.twter"
keyRegistry = "social.yarn.lextwt.registry"
keyFeed = "social.yarn.lextwt.feed"
)
func Register() {
@ -37,6 +39,8 @@ func Register() {
avro.Register(keyTwt, Twt{})
avro.Register(keyTwter, Twter{})
avro.Register(keyRegistry, Registry{})
avro.Register(keyFeed, Feed{})
}
func Elem(o any) any {
@ -79,13 +83,13 @@ func FromLextwt(twt *lextwt.Twt) Twt {
}
ts := twt.Created()
_, offset := ts.Zone()
zone, offset := ts.Zone()
l := Twt{
Nick: twt.Twter().Nick,
URI: twt.Twter().URI,
Created: ts.UnixMilli(),
CreatedOffset: offset,
CreatedZone: "",
CreatedZone: zone,
}
for _, e := range twt.Elems() {
@ -239,10 +243,6 @@ func EncodeRegistry(r TwtRegistry) ([]byte, error) {
out.Preamble = append(out.Preamble, Comment{Comment: comment.Text()})
}
for _, twter := range r.Twters() {
out.Twters = append(out.Twters, Twter{Nick: twter.Nick, URI: twter.URI})
}
for _, twt := range r.Twts() {
out.Twts = append(out.Twts, FromTwt(twt))
}
@ -256,7 +256,7 @@ func DecodeRegistry(b []byte) (TwtRegistry, error) {
return nil, err
}
preamble := make(lextwt.Comments, len(out.Preamble))
preamble := make(lextwt.Comments, 0, len(out.Preamble))
for _, comment := range out.Preamble {
if comment.Key != "" {
preamble = append(preamble, lextwt.NewCommentValue(comment.Comment, comment.Key, comment.Value))
@ -265,15 +265,67 @@ func DecodeRegistry(b []byte) (TwtRegistry, error) {
}
}
twters := make([]*types.Twter, len(out.Twters))
for _, twter := range out.Twters {
twters = append(twters, &types.Twter{Nick:twter.Nick, URI:twter.URI})
}
twts := make(types.Twts, len(out.Twts))
twts := make(types.Twts, 0, len(out.Twts))
for _, twt := range out.Twts {
twts = append(twts, twt.ToTwt())
}
return lextwt.NewTwtRegistry(twters, preamble, twts), nil
}
return lextwt.NewTwtRegistry(preamble, twts), nil
}
type TwtFeed interface {
Twter() *types.Twter
Preamble() lextwt.Comments
Twts() types.Twts
WriteTo(w io.Writer) (int64, error)
}
func EncodeFeed(r TwtFeed) ([]byte, error) {
out := Feed{}
out.Twter.Nick = r.Twter().Nick
out.Twter.URI = r.Twter().URI
for _, comment := range r.Preamble() {
if comment.Key() != "" {
out.Preamble = append(out.Preamble, Comment{Key: comment.Key(), Value: comment.Value()})
continue
}
out.Preamble = append(out.Preamble, Comment{Comment: comment.Text()})
}
for _, twt := range r.Twts() {
out.Twts = append(out.Twts, FromTwt(twt))
}
return out.Marshal()
}
func DecodeFeed(b []byte) (TwtFeed, error) {
var out Feed
if err := out.Unmarshal(b); err != nil {
return nil, err
}
twter := types.Twter{
Nick: out.Twter.Nick,
URI: out.Twter.URI,
}
preamble := make(lextwt.Comments, 0, len(out.Preamble))
for _, comment := range out.Preamble {
if comment.Key != "" {
preamble = append(preamble, lextwt.NewCommentValue(comment.Comment, comment.Key, comment.Value))
} else {
preamble = append(preamble, lextwt.NewComment(comment.Comment))
}
}
twts := make(types.Twts, 0, len(out.Twts))
for _, twt := range out.Twts {
twts = append(twts, twt.ToTwt())
}
return lextwt.NewTwtFile(twter, preamble, twts), nil
}

View File

@ -18,6 +18,13 @@ type TwtRegistry interface {
WriteTo(w io.Writer) (int64, error)
}
type TwtFeed interface {
Twter() *types.Twter
Preamble() lextwt.Comments
Twts() types.Twts
WriteTo(w io.Writer) (int64, error)
}
func EncodeTwt(twt types.Twt) []byte {
lx, ok := twt.(*lextwt.Twt)
if !ok {
@ -41,7 +48,6 @@ func EncodeRegistry(lis TwtRegistry) []byte {
func createRegistry(b *flatbuffers.Builder, r TwtRegistry) flatbuffers.UOffsetT {
preamble := make([]flatbuffers.UOffsetT, len(r.Preamble()))
twters := make([]flatbuffers.UOffsetT, len(r.Twters()))
twts := make([]flatbuffers.UOffsetT, len(r.Twts()))
for i, twt := range r.Twts() {
@ -56,16 +62,6 @@ func createRegistry(b *flatbuffers.Builder, r TwtRegistry) flatbuffers.UOffsetT
}
oTwts := b.EndVector(len(twts))
for _, twter := range r.Twters() {
twters = append(twters, createTwter(b, twter))
}
fbs.TwtRegistryStartTwtersVector(b, len(twters))
for _, offset := range twters {
b.PrependUOffsetT(offset)
}
oTwters := b.EndVector(len(r.Twters()))
for _, comment := range r.Preamble() {
preamble = append(preamble, createComment(b, comment))
}
@ -78,11 +74,52 @@ func createRegistry(b *flatbuffers.Builder, r TwtRegistry) flatbuffers.UOffsetT
fbs.TwtRegistryStart(b)
fbs.TwtRegistryAddTwts(b, oTwts)
fbs.TwtRegistryAddTwters(b, oTwters)
fbs.TwtRegistryAddPreamble(b, oPreamble)
return fbs.TwtRegistryEnd(b)
}
func EncodeFeed(lis TwtFeed) []byte {
b := flatbuffers.NewBuilder(len(lis.Twts()))
b.Finish(createFeed(b, lis))
return b.FinishedBytes()
}
func createFeed(b *flatbuffers.Builder, r TwtFeed) flatbuffers.UOffsetT {
preamble := make([]flatbuffers.UOffsetT, len(r.Preamble()))
twts := make([]flatbuffers.UOffsetT, len(r.Twts()))
twter := createTwter(b, r.Twter())
for i, twt := range r.Twts() {
if twt, ok := twt.(*lextwt.Twt); ok {
twts[i] = createTwt(b, twt)
}
}
fbs.TwtFeedStartTwtsVector(b, len(twts))
for _, offset := range twts {
b.PrependUOffsetT(offset)
}
oTwts := b.EndVector(len(twts))
for _, comment := range r.Preamble() {
preamble = append(preamble, createComment(b, comment))
}
fbs.TwtFeedStartPreambleVector(b, len(preamble))
for _, offset := range preamble {
b.PrependUOffsetT(offset)
}
oPreamble := b.EndVector(len(preamble))
fbs.TwtFeedStart(b)
fbs.TwtFeedAddTwter(b, twter)
fbs.TwtFeedAddTwts(b, oTwts)
fbs.TwtFeedAddPreamble(b, oPreamble)
return fbs.TwtFeedEnd(b)
}
func createTwt(b *flatbuffers.Builder, twt *lextwt.Twt) flatbuffers.UOffsetT {
twter := twt.Twter()
@ -335,14 +372,6 @@ func fromRegistry(r *fbs.TwtRegistry) TwtRegistry {
twts[len(twts)-i-1] = fromTwt(twt)
}
twters := make([]*types.Twter, r.TwtersLength())
for i := 0; i < r.TwtersLength(); i++ {
twter := &fbs.Twter{}
if r.Twters(twter, i) {
twters[len(twters)-i-1] = fromTwter(twter)
}
}
preamble := make(lextwt.Comments, r.PreambleLength())
for i := 0; i < r.PreambleLength(); i++ {
comment := &fbs.Comment{}
@ -351,7 +380,7 @@ func fromRegistry(r *fbs.TwtRegistry) TwtRegistry {
}
}
return lextwt.NewTwtRegistry(twters, preamble, twts)
return lextwt.NewTwtRegistry(preamble, twts)
}
func fromDateTime(o *fbs.DateTime) *lextwt.DateTime {

117
twt-fbs/lextwt/TwtFeed.go Normal file
View File

@ -0,0 +1,117 @@
// Code generated by the FlatBuffers compiler. DO NOT EDIT.
package lextwt
import (
flatbuffers "github.com/google/flatbuffers/go"
)
type TwtFeed struct {
_tab flatbuffers.Table
}
func GetRootAsTwtFeed(buf []byte, offset flatbuffers.UOffsetT) *TwtFeed {
n := flatbuffers.GetUOffsetT(buf[offset:])
x := &TwtFeed{}
x.Init(buf, n+offset)
return x
}
func FinishTwtFeedBuffer(builder *flatbuffers.Builder, offset flatbuffers.UOffsetT) {
builder.Finish(offset)
}
func GetSizePrefixedRootAsTwtFeed(buf []byte, offset flatbuffers.UOffsetT) *TwtFeed {
n := flatbuffers.GetUOffsetT(buf[offset+flatbuffers.SizeUint32:])
x := &TwtFeed{}
x.Init(buf, n+offset+flatbuffers.SizeUint32)
return x
}
func FinishSizePrefixedTwtFeedBuffer(builder *flatbuffers.Builder, offset flatbuffers.UOffsetT) {
builder.FinishSizePrefixed(offset)
}
func (rcv *TwtFeed) Init(buf []byte, i flatbuffers.UOffsetT) {
rcv._tab.Bytes = buf
rcv._tab.Pos = i
}
func (rcv *TwtFeed) Table() flatbuffers.Table {
return rcv._tab
}
func (rcv *TwtFeed) Twter(obj *Twter) *Twter {
o := flatbuffers.UOffsetT(rcv._tab.Offset(4))
if o != 0 {
x := rcv._tab.Indirect(o + rcv._tab.Pos)
if obj == nil {
obj = new(Twter)
}
obj.Init(rcv._tab.Bytes, x)
return obj
}
return nil
}
func (rcv *TwtFeed) Preamble(obj *Comment, j int) bool {
o := flatbuffers.UOffsetT(rcv._tab.Offset(6))
if o != 0 {
x := rcv._tab.Vector(o)
x += flatbuffers.UOffsetT(j) * 4
x = rcv._tab.Indirect(x)
obj.Init(rcv._tab.Bytes, x)
return true
}
return false
}
func (rcv *TwtFeed) PreambleLength() int {
o := flatbuffers.UOffsetT(rcv._tab.Offset(6))
if o != 0 {
return rcv._tab.VectorLen(o)
}
return 0
}
func (rcv *TwtFeed) Twts(obj *Twt, j int) bool {
o := flatbuffers.UOffsetT(rcv._tab.Offset(8))
if o != 0 {
x := rcv._tab.Vector(o)
x += flatbuffers.UOffsetT(j) * 4
x = rcv._tab.Indirect(x)
obj.Init(rcv._tab.Bytes, x)
return true
}
return false
}
func (rcv *TwtFeed) TwtsLength() int {
o := flatbuffers.UOffsetT(rcv._tab.Offset(8))
if o != 0 {
return rcv._tab.VectorLen(o)
}
return 0
}
func TwtFeedStart(builder *flatbuffers.Builder) {
builder.StartObject(3)
}
func TwtFeedAddTwter(builder *flatbuffers.Builder, twter flatbuffers.UOffsetT) {
builder.PrependUOffsetTSlot(0, flatbuffers.UOffsetT(twter), 0)
}
func TwtFeedAddPreamble(builder *flatbuffers.Builder, preamble flatbuffers.UOffsetT) {
builder.PrependUOffsetTSlot(1, flatbuffers.UOffsetT(preamble), 0)
}
func TwtFeedStartPreambleVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
return builder.StartVector(4, numElems, 4)
}
func TwtFeedAddTwts(builder *flatbuffers.Builder, twts flatbuffers.UOffsetT) {
builder.PrependUOffsetTSlot(2, flatbuffers.UOffsetT(twts), 0)
}
func TwtFeedStartTwtsVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
return builder.StartVector(4, numElems, 4)
}
func TwtFeedEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
return builder.EndObject()
}

View File

@ -61,28 +61,8 @@ func (rcv *TwtRegistry) PreambleLength() int {
return 0
}
func (rcv *TwtRegistry) Twters(obj *Twter, j int) bool {
o := flatbuffers.UOffsetT(rcv._tab.Offset(6))
if o != 0 {
x := rcv._tab.Vector(o)
x += flatbuffers.UOffsetT(j) * 4
x = rcv._tab.Indirect(x)
obj.Init(rcv._tab.Bytes, x)
return true
}
return false
}
func (rcv *TwtRegistry) TwtersLength() int {
o := flatbuffers.UOffsetT(rcv._tab.Offset(6))
if o != 0 {
return rcv._tab.VectorLen(o)
}
return 0
}
func (rcv *TwtRegistry) Twts(obj *Twt, j int) bool {
o := flatbuffers.UOffsetT(rcv._tab.Offset(8))
o := flatbuffers.UOffsetT(rcv._tab.Offset(6))
if o != 0 {
x := rcv._tab.Vector(o)
x += flatbuffers.UOffsetT(j) * 4
@ -94,7 +74,7 @@ func (rcv *TwtRegistry) Twts(obj *Twt, j int) bool {
}
func (rcv *TwtRegistry) TwtsLength() int {
o := flatbuffers.UOffsetT(rcv._tab.Offset(8))
o := flatbuffers.UOffsetT(rcv._tab.Offset(6))
if o != 0 {
return rcv._tab.VectorLen(o)
}
@ -102,7 +82,7 @@ func (rcv *TwtRegistry) TwtsLength() int {
}
func TwtRegistryStart(builder *flatbuffers.Builder) {
builder.StartObject(3)
builder.StartObject(2)
}
func TwtRegistryAddPreamble(builder *flatbuffers.Builder, preamble flatbuffers.UOffsetT) {
builder.PrependUOffsetTSlot(0, flatbuffers.UOffsetT(preamble), 0)
@ -110,14 +90,8 @@ func TwtRegistryAddPreamble(builder *flatbuffers.Builder, preamble flatbuffers.U
func TwtRegistryStartPreambleVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
return builder.StartVector(4, numElems, 4)
}
func TwtRegistryAddTwters(builder *flatbuffers.Builder, twters flatbuffers.UOffsetT) {
builder.PrependUOffsetTSlot(1, flatbuffers.UOffsetT(twters), 0)
}
func TwtRegistryStartTwtersVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
return builder.StartVector(4, numElems, 4)
}
func TwtRegistryAddTwts(builder *flatbuffers.Builder, twts flatbuffers.UOffsetT) {
builder.PrependUOffsetTSlot(2, flatbuffers.UOffsetT(twts), 0)
builder.PrependUOffsetTSlot(1, flatbuffers.UOffsetT(twts), 0)
}
func TwtRegistryStartTwtsVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
return builder.StartVector(4, numElems, 4)

View File

@ -34,12 +34,6 @@ func DecodeRegistry(b []byte) (twtRegistry, error) {
}
func (r *TwtRegistry) FromLextwt(twt twtRegistry) error {
twters := twt.Twters()
r.Twters = apply(
slices.All(twters),
make([]*Twter, len(twters)),
fromTwter)
preamble := twt.Preamble()
r.Preamble = apply(
slices.All(preamble),
@ -56,9 +50,6 @@ func (r *TwtRegistry) FromLextwt(twt twtRegistry) error {
}
func (r *TwtRegistry) ToLextwt() twtRegistry {
return lextwt.NewTwtRegistry(
apply(slices.All(r.Twters), make([]*types.Twter, len(r.Twters)), func(c *Twter) *types.Twter {
return c.ToLextwt()
}),
apply(slices.All(r.Preamble), make(lextwt.Comments, len(r.Preamble)), func(c *Comment) *lextwt.Comment {
return c.ToLextwt()
}),
@ -68,6 +59,57 @@ func (r *TwtRegistry) ToLextwt() twtRegistry {
)
}
type twtFeed interface {
Twter() *types.Twter
Preamble() lextwt.Comments
Twts() types.Twts
WriteTo(w io.Writer) (int64, error)
}
func EncodeFeed(r twtFeed) ([]byte, error) {
o := &TwtFeed{}
o.FromLextwt(r)
return proto.Marshal(o)
}
func DecodeFeed(b []byte) (twtFeed, error) {
o := &TwtFeed{}
err := proto.Unmarshal(b, o)
if err != nil {
return nil, err
}
return o.ToLextwt(), nil
}
func (r *TwtFeed) FromLextwt(twt twtFeed) error {
r.Twter = fromTwter(twt.Twter())
preamble := twt.Preamble()
r.Preamble = apply(
slices.All(preamble),
make([]*Comment, len(preamble)),
fromComment)
twts := twt.Twts()
r.Twts = apply(
slices.All(twts),
make([]*Twt, len(twts)),
fromTwt)
return nil
}
func (r *TwtFeed) ToLextwt() twtFeed {
return lextwt.NewTwtFile(
*r.Twter.ToLextwt(),
apply(slices.All(r.Preamble), make(lextwt.Comments, len(r.Preamble)), func(c *Comment) *lextwt.Comment {
return c.ToLextwt()
}),
apply(slices.All(r.Twts), make(types.Twts, len(r.Twts)), func(c *Twt) types.Twt {
return c.ToLextwt()
}),
)
}
func apply[U, V any](u iter.Seq2[int, U], v []V, fn func(U) V) []V {
for i, u := range u {
v[i] = fn(u)

View File

@ -67,7 +67,7 @@ func (x Code_Type) Number() protoreflect.EnumNumber {
// Deprecated: Use Code_Type.Descriptor instead.
func (Code_Type) EnumDescriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{3, 0}
return file_lextwt_proto_rawDescGZIP(), []int{5, 0}
}
type Link_Type int32
@ -122,7 +122,7 @@ func (x Link_Type) Number() protoreflect.EnumNumber {
// Deprecated: Use Link_Type.Descriptor instead.
func (Link_Type) EnumDescriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{7, 0}
return file_lextwt_proto_rawDescGZIP(), []int{9, 0}
}
type LatestTwts struct {
@ -161,10 +161,45 @@ func (*LatestTwts) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{0}
}
type Pager struct {
state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *Pager) Reset() {
*x = Pager{}
mi := &file_lextwt_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *Pager) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Pager) ProtoMessage() {}
func (x *Pager) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[1]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Pager.ProtoReflect.Descriptor instead.
func (*Pager) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{1}
}
type TwtRegistry struct {
state protoimpl.MessageState `protogen:"open.v1"`
Preamble []*Comment `protobuf:"bytes,1,rep,name=preamble,proto3" json:"preamble,omitempty"`
Twters []*Twter `protobuf:"bytes,2,rep,name=twters,proto3" json:"twters,omitempty"`
Twts []*Twt `protobuf:"bytes,3,rep,name=twts,proto3" json:"twts,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
@ -172,7 +207,7 @@ type TwtRegistry struct {
func (x *TwtRegistry) Reset() {
*x = TwtRegistry{}
mi := &file_lextwt_proto_msgTypes[1]
mi := &file_lextwt_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -184,7 +219,7 @@ func (x *TwtRegistry) String() string {
func (*TwtRegistry) ProtoMessage() {}
func (x *TwtRegistry) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[1]
mi := &file_lextwt_proto_msgTypes[2]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -197,7 +232,7 @@ func (x *TwtRegistry) ProtoReflect() protoreflect.Message {
// Deprecated: Use TwtRegistry.ProtoReflect.Descriptor instead.
func (*TwtRegistry) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{1}
return file_lextwt_proto_rawDescGZIP(), []int{2}
}
func (x *TwtRegistry) GetPreamble() []*Comment {
@ -207,14 +242,67 @@ func (x *TwtRegistry) GetPreamble() []*Comment {
return nil
}
func (x *TwtRegistry) GetTwters() []*Twter {
func (x *TwtRegistry) GetTwts() []*Twt {
if x != nil {
return x.Twters
return x.Twts
}
return nil
}
func (x *TwtRegistry) GetTwts() []*Twt {
type TwtFeed struct {
state protoimpl.MessageState `protogen:"open.v1"`
Twter *Twter `protobuf:"bytes,2,opt,name=twter,proto3" json:"twter,omitempty"`
Preamble []*Comment `protobuf:"bytes,1,rep,name=preamble,proto3" json:"preamble,omitempty"`
Twts []*Twt `protobuf:"bytes,3,rep,name=twts,proto3" json:"twts,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *TwtFeed) Reset() {
*x = TwtFeed{}
mi := &file_lextwt_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *TwtFeed) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TwtFeed) ProtoMessage() {}
func (x *TwtFeed) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[3]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TwtFeed.ProtoReflect.Descriptor instead.
func (*TwtFeed) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{3}
}
func (x *TwtFeed) GetTwter() *Twter {
if x != nil {
return x.Twter
}
return nil
}
func (x *TwtFeed) GetPreamble() []*Comment {
if x != nil {
return x.Preamble
}
return nil
}
func (x *TwtFeed) GetTwts() []*Twt {
if x != nil {
return x.Twts
}
@ -231,7 +319,7 @@ type BangMention struct {
func (x *BangMention) Reset() {
*x = BangMention{}
mi := &file_lextwt_proto_msgTypes[2]
mi := &file_lextwt_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -243,7 +331,7 @@ func (x *BangMention) String() string {
func (*BangMention) ProtoMessage() {}
func (x *BangMention) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[2]
mi := &file_lextwt_proto_msgTypes[4]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -256,7 +344,7 @@ func (x *BangMention) ProtoReflect() protoreflect.Message {
// Deprecated: Use BangMention.ProtoReflect.Descriptor instead.
func (*BangMention) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{2}
return file_lextwt_proto_rawDescGZIP(), []int{4}
}
func (x *BangMention) GetName() string {
@ -283,7 +371,7 @@ type Code struct {
func (x *Code) Reset() {
*x = Code{}
mi := &file_lextwt_proto_msgTypes[3]
mi := &file_lextwt_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -295,7 +383,7 @@ func (x *Code) String() string {
func (*Code) ProtoMessage() {}
func (x *Code) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[3]
mi := &file_lextwt_proto_msgTypes[5]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -308,7 +396,7 @@ func (x *Code) ProtoReflect() protoreflect.Message {
// Deprecated: Use Code.ProtoReflect.Descriptor instead.
func (*Code) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{3}
return file_lextwt_proto_rawDescGZIP(), []int{5}
}
func (x *Code) GetType() Code_Type {
@ -336,7 +424,7 @@ type Comment struct {
func (x *Comment) Reset() {
*x = Comment{}
mi := &file_lextwt_proto_msgTypes[4]
mi := &file_lextwt_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -348,7 +436,7 @@ func (x *Comment) String() string {
func (*Comment) ProtoMessage() {}
func (x *Comment) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[4]
mi := &file_lextwt_proto_msgTypes[6]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -361,7 +449,7 @@ func (x *Comment) ProtoReflect() protoreflect.Message {
// Deprecated: Use Comment.ProtoReflect.Descriptor instead.
func (*Comment) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{4}
return file_lextwt_proto_rawDescGZIP(), []int{6}
}
func (x *Comment) GetComment() string {
@ -396,7 +484,7 @@ type DateTime struct {
func (x *DateTime) Reset() {
*x = DateTime{}
mi := &file_lextwt_proto_msgTypes[5]
mi := &file_lextwt_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -408,7 +496,7 @@ func (x *DateTime) String() string {
func (*DateTime) ProtoMessage() {}
func (x *DateTime) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[5]
mi := &file_lextwt_proto_msgTypes[7]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -421,7 +509,7 @@ func (x *DateTime) ProtoReflect() protoreflect.Message {
// Deprecated: Use DateTime.ProtoReflect.Descriptor instead.
func (*DateTime) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{5}
return file_lextwt_proto_rawDescGZIP(), []int{7}
}
func (x *DateTime) GetTimestamp() int64 {
@ -453,7 +541,7 @@ type LineSeparator struct {
func (x *LineSeparator) Reset() {
*x = LineSeparator{}
mi := &file_lextwt_proto_msgTypes[6]
mi := &file_lextwt_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -465,7 +553,7 @@ func (x *LineSeparator) String() string {
func (*LineSeparator) ProtoMessage() {}
func (x *LineSeparator) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[6]
mi := &file_lextwt_proto_msgTypes[8]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -478,7 +566,7 @@ func (x *LineSeparator) ProtoReflect() protoreflect.Message {
// Deprecated: Use LineSeparator.ProtoReflect.Descriptor instead.
func (*LineSeparator) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{6}
return file_lextwt_proto_rawDescGZIP(), []int{8}
}
type Link struct {
@ -493,7 +581,7 @@ type Link struct {
func (x *Link) Reset() {
*x = Link{}
mi := &file_lextwt_proto_msgTypes[7]
mi := &file_lextwt_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -505,7 +593,7 @@ func (x *Link) String() string {
func (*Link) ProtoMessage() {}
func (x *Link) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[7]
mi := &file_lextwt_proto_msgTypes[9]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -518,7 +606,7 @@ func (x *Link) ProtoReflect() protoreflect.Message {
// Deprecated: Use Link.ProtoReflect.Descriptor instead.
func (*Link) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{7}
return file_lextwt_proto_rawDescGZIP(), []int{9}
}
func (x *Link) GetType() Link_Type {
@ -559,7 +647,7 @@ type Mention struct {
func (x *Mention) Reset() {
*x = Mention{}
mi := &file_lextwt_proto_msgTypes[8]
mi := &file_lextwt_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -571,7 +659,7 @@ func (x *Mention) String() string {
func (*Mention) ProtoMessage() {}
func (x *Mention) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[8]
mi := &file_lextwt_proto_msgTypes[10]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -584,7 +672,7 @@ func (x *Mention) ProtoReflect() protoreflect.Message {
// Deprecated: Use Mention.ProtoReflect.Descriptor instead.
func (*Mention) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{8}
return file_lextwt_proto_rawDescGZIP(), []int{10}
}
func (x *Mention) GetName() string {
@ -611,7 +699,7 @@ type Subject struct {
func (x *Subject) Reset() {
*x = Subject{}
mi := &file_lextwt_proto_msgTypes[9]
mi := &file_lextwt_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -623,7 +711,7 @@ func (x *Subject) String() string {
func (*Subject) ProtoMessage() {}
func (x *Subject) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[9]
mi := &file_lextwt_proto_msgTypes[11]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -636,7 +724,7 @@ func (x *Subject) ProtoReflect() protoreflect.Message {
// Deprecated: Use Subject.ProtoReflect.Descriptor instead.
func (*Subject) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{9}
return file_lextwt_proto_rawDescGZIP(), []int{11}
}
func (x *Subject) GetSubject() string {
@ -663,7 +751,7 @@ type Tag struct {
func (x *Tag) Reset() {
*x = Tag{}
mi := &file_lextwt_proto_msgTypes[10]
mi := &file_lextwt_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -675,7 +763,7 @@ func (x *Tag) String() string {
func (*Tag) ProtoMessage() {}
func (x *Tag) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[10]
mi := &file_lextwt_proto_msgTypes[12]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -688,7 +776,7 @@ func (x *Tag) ProtoReflect() protoreflect.Message {
// Deprecated: Use Tag.ProtoReflect.Descriptor instead.
func (*Tag) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{10}
return file_lextwt_proto_rawDescGZIP(), []int{12}
}
func (x *Tag) GetTag() string {
@ -714,7 +802,7 @@ type Text struct {
func (x *Text) Reset() {
*x = Text{}
mi := &file_lextwt_proto_msgTypes[11]
mi := &file_lextwt_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -726,7 +814,7 @@ func (x *Text) String() string {
func (*Text) ProtoMessage() {}
func (x *Text) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[11]
mi := &file_lextwt_proto_msgTypes[13]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -739,7 +827,7 @@ func (x *Text) ProtoReflect() protoreflect.Message {
// Deprecated: Use Text.ProtoReflect.Descriptor instead.
func (*Text) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{11}
return file_lextwt_proto_rawDescGZIP(), []int{13}
}
func (x *Text) GetText() string {
@ -759,7 +847,7 @@ type Twter struct {
func (x *Twter) Reset() {
*x = Twter{}
mi := &file_lextwt_proto_msgTypes[12]
mi := &file_lextwt_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -771,7 +859,7 @@ func (x *Twter) String() string {
func (*Twter) ProtoMessage() {}
func (x *Twter) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[12]
mi := &file_lextwt_proto_msgTypes[14]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -784,7 +872,7 @@ func (x *Twter) ProtoReflect() protoreflect.Message {
// Deprecated: Use Twter.ProtoReflect.Descriptor instead.
func (*Twter) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{12}
return file_lextwt_proto_rawDescGZIP(), []int{14}
}
func (x *Twter) GetNick() string {
@ -821,7 +909,7 @@ type Elem struct {
func (x *Elem) Reset() {
*x = Elem{}
mi := &file_lextwt_proto_msgTypes[13]
mi := &file_lextwt_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -833,7 +921,7 @@ func (x *Elem) String() string {
func (*Elem) ProtoMessage() {}
func (x *Elem) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[13]
mi := &file_lextwt_proto_msgTypes[15]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -846,7 +934,7 @@ func (x *Elem) ProtoReflect() protoreflect.Message {
// Deprecated: Use Elem.ProtoReflect.Descriptor instead.
func (*Elem) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{13}
return file_lextwt_proto_rawDescGZIP(), []int{15}
}
func (x *Elem) GetElem() isElem_Elem {
@ -1006,7 +1094,7 @@ type Twt struct {
func (x *Twt) Reset() {
*x = Twt{}
mi := &file_lextwt_proto_msgTypes[14]
mi := &file_lextwt_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -1018,7 +1106,7 @@ func (x *Twt) String() string {
func (*Twt) ProtoMessage() {}
func (x *Twt) ProtoReflect() protoreflect.Message {
mi := &file_lextwt_proto_msgTypes[14]
mi := &file_lextwt_proto_msgTypes[16]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -1031,7 +1119,7 @@ func (x *Twt) ProtoReflect() protoreflect.Message {
// Deprecated: Use Twt.ProtoReflect.Descriptor instead.
func (*Twt) Descriptor() ([]byte, []int) {
return file_lextwt_proto_rawDescGZIP(), []int{14}
return file_lextwt_proto_rawDescGZIP(), []int{16}
}
func (x *Twt) GetTwter() *Twter {
@ -1059,99 +1147,106 @@ var File_lextwt_proto protoreflect.FileDescriptor
var file_lextwt_proto_rawDesc = string([]byte{
0x0a, 0x0c, 0x6c, 0x65, 0x78, 0x74, 0x77, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x0c,
0x0a, 0x0a, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x77, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x0b,
0x54, 0x77, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x08, 0x70,
0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e,
0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c,
0x65, 0x12, 0x1e, 0x0a, 0x06, 0x74, 0x77, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x06, 0x2e, 0x54, 0x77, 0x74, 0x65, 0x72, 0x52, 0x06, 0x74, 0x77, 0x74, 0x65, 0x72,
0x73, 0x12, 0x18, 0x0a, 0x04, 0x74, 0x77, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x04, 0x2e, 0x54, 0x77, 0x74, 0x52, 0x04, 0x74, 0x77, 0x74, 0x73, 0x22, 0x39, 0x0a, 0x0b, 0x42,
0x61, 0x6e, 0x67, 0x4d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16,
0x0a, 0x0a, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x77, 0x74, 0x73, 0x22, 0x07, 0x0a, 0x05,
0x50, 0x61, 0x67, 0x65, 0x72, 0x22, 0x4d, 0x0a, 0x0b, 0x54, 0x77, 0x74, 0x52, 0x65, 0x67, 0x69,
0x73, 0x74, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65,
0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74,
0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x04, 0x74, 0x77,
0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x54, 0x77, 0x74, 0x52, 0x04,
0x74, 0x77, 0x74, 0x73, 0x22, 0x67, 0x0a, 0x07, 0x54, 0x77, 0x74, 0x46, 0x65, 0x65, 0x64, 0x12,
0x1c, 0x0a, 0x05, 0x74, 0x77, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x06,
0x2e, 0x54, 0x77, 0x74, 0x65, 0x72, 0x52, 0x05, 0x74, 0x77, 0x74, 0x65, 0x72, 0x12, 0x24, 0x0a,
0x08, 0x70, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x08, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x70, 0x72, 0x65, 0x61, 0x6d,
0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x04, 0x74, 0x77, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x04, 0x2e, 0x54, 0x77, 0x74, 0x52, 0x04, 0x74, 0x77, 0x74, 0x73, 0x22, 0x39, 0x0a,
0x0b, 0x42, 0x61, 0x6e, 0x67, 0x4d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04,
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x79, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65,
0x12, 0x1e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a,
0x2e, 0x43, 0x6f, 0x64, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65,
0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
0x63, 0x6f, 0x64, 0x65, 0x22, 0x3d, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10,
0x43, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e,
0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x42, 0x4c, 0x4f, 0x43,
0x4b, 0x10, 0x02, 0x22, 0x4b, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18,
0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x22, 0x54, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09,
0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66,
0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73,
0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x4c, 0x69, 0x6e, 0x65, 0x53, 0x65,
0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0xc7, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x6e, 0x6b,
0x12, 0x1e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a,
0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65,
0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61,
0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01,
0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69,
0x74, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
0x22, 0x5f, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4c, 0x49, 0x4e, 0x4b,
0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11,
0x0a, 0x0d, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x10,
0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x10,
0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10,
0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4e, 0x41, 0x4b, 0x45, 0x44, 0x10,
0x04, 0x22, 0x35, 0x0a, 0x07, 0x4d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04,
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x3b, 0x0a, 0x07, 0x53, 0x75, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x16, 0x0a,
0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x54, 0x61, 0x67,
0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2f, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03,
0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x16,
0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x79, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1e,
0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x43,
0x6f, 0x64, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12,
0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f,
0x64, 0x65, 0x22, 0x3d, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f,
0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10,
0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10,
0x02, 0x22, 0x4b, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07,
0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63,
0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x54,
0x0a, 0x08, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69,
0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74,
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73,
0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74,
0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
0x7a, 0x6f, 0x6e, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x4c, 0x69, 0x6e, 0x65, 0x53, 0x65, 0x70, 0x61,
0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0xc7, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x1e,
0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x4c,
0x69, 0x6e, 0x6b, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10,
0x0a, 0x03, 0x61, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x6c, 0x74,
0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c,
0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x5f,
0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x55,
0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d,
0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x10, 0x01, 0x12,
0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x10, 0x02, 0x12,
0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10, 0x03, 0x12,
0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4e, 0x41, 0x4b, 0x45, 0x44, 0x10, 0x04, 0x22,
0x35, 0x0a, 0x07, 0x4d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16,
0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x3b, 0x0a, 0x07, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63,
0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x03, 0x74,
0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x03,
0x74, 0x61, 0x67, 0x22, 0x2f, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61,
0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06,
0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61,
0x72, 0x67, 0x65, 0x74, 0x22, 0x1a, 0x0a, 0x04, 0x54, 0x65, 0x78, 0x74, 0x12, 0x12, 0x0a, 0x04,
0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74,
0x22, 0x2d, 0x0a, 0x05, 0x54, 0x77, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63,
0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x12, 0x10, 0x0a,
0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x22,
0xdb, 0x02, 0x0a, 0x04, 0x45, 0x6c, 0x65, 0x6d, 0x12, 0x30, 0x0a, 0x0b, 0x62, 0x61, 0x6e, 0x67,
0x6d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e,
0x42, 0x61, 0x6e, 0x67, 0x4d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x62,
0x61, 0x6e, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x04, 0x63, 0x6f,
0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x48,
0x00, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65,
0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65,
0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a,
0x0d, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x04,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x53, 0x65, 0x70, 0x61, 0x72,
0x61, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x65, 0x70, 0x61,
0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x05, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x69,
0x6e, 0x6b, 0x12, 0x24, 0x0a, 0x07, 0x6d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x4d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52,
0x07, 0x6d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x53, 0x75, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x18,
0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e, 0x54, 0x61,
0x67, 0x48, 0x00, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x1b, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74,
0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x48, 0x00, 0x52,
0x04, 0x74, 0x65, 0x78, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x65, 0x6c, 0x65, 0x6d, 0x22, 0x61, 0x0a,
0x03, 0x54, 0x77, 0x74, 0x12, 0x1c, 0x0a, 0x05, 0x74, 0x77, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x54, 0x77, 0x74, 0x65, 0x72, 0x52, 0x05, 0x74, 0x77, 0x74,
0x65, 0x72, 0x12, 0x23, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x07,
0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x03,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x52, 0x03, 0x6d, 0x73, 0x67,
0x32, 0x3d, 0x0a, 0x12, 0x54, 0x77, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0a, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74,
0x54, 0x77, 0x74, 0x73, 0x12, 0x0b, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x77, 0x74,
0x73, 0x1a, 0x0c, 0x2e, 0x54, 0x77, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x42,
0x1c, 0x5a, 0x1a, 0x67, 0x6f, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x2e, 0x69, 0x73, 0x2f, 0x6c, 0x65,
0x78, 0x74, 0x77, 0x74, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x1a, 0x0a, 0x04, 0x54, 0x65, 0x78, 0x74, 0x12, 0x12,
0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65,
0x78, 0x74, 0x22, 0x2d, 0x0a, 0x05, 0x54, 0x77, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e,
0x69, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x12,
0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72,
0x69, 0x22, 0xdb, 0x02, 0x0a, 0x04, 0x45, 0x6c, 0x65, 0x6d, 0x12, 0x30, 0x0a, 0x0b, 0x62, 0x61,
0x6e, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x0c, 0x2e, 0x42, 0x61, 0x6e, 0x67, 0x4d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52,
0x0b, 0x62, 0x61, 0x6e, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x04,
0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x43, 0x6f, 0x64,
0x65, 0x48, 0x00, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x07, 0x63, 0x6f, 0x6d,
0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x43, 0x6f, 0x6d,
0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12,
0x36, 0x0a, 0x0d, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72,
0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x53, 0x65, 0x70,
0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x65,
0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x6b, 0x18,
0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x04,
0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x24, 0x0a, 0x07, 0x6d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x18,
0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x4d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x48,
0x00, 0x52, 0x07, 0x6d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x07, 0x73, 0x75,
0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x53, 0x75,
0x62, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74,
0x12, 0x18, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x04, 0x2e,
0x54, 0x61, 0x67, 0x48, 0x00, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x1b, 0x0a, 0x04, 0x74, 0x65,
0x78, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x48,
0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x65, 0x6c, 0x65, 0x6d, 0x22,
0x61, 0x0a, 0x03, 0x54, 0x77, 0x74, 0x12, 0x1c, 0x0a, 0x05, 0x74, 0x77, 0x74, 0x65, 0x72, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x54, 0x77, 0x74, 0x65, 0x72, 0x52, 0x05, 0x74,
0x77, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65,
0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x03, 0x6d, 0x73, 0x67,
0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x52, 0x03, 0x6d,
0x73, 0x67, 0x32, 0x5c, 0x0a, 0x12, 0x54, 0x77, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0a, 0x6c, 0x61, 0x74, 0x65,
0x73, 0x74, 0x54, 0x77, 0x74, 0x73, 0x12, 0x0b, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54,
0x77, 0x74, 0x73, 0x1a, 0x0c, 0x2e, 0x54, 0x77, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
0x79, 0x12, 0x1d, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x06, 0x2e, 0x50, 0x61, 0x67,
0x65, 0x72, 0x1a, 0x0c, 0x2e, 0x54, 0x77, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
0x42, 0x1c, 0x5a, 0x1a, 0x67, 0x6f, 0x2e, 0x73, 0x6f, 0x75, 0x72, 0x2e, 0x69, 0x73, 0x2f, 0x6c,
0x65, 0x78, 0x74, 0x77, 0x74, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
})
var (
@ -1167,52 +1262,58 @@ func file_lextwt_proto_rawDescGZIP() []byte {
}
var file_lextwt_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_lextwt_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
var file_lextwt_proto_msgTypes = make([]protoimpl.MessageInfo, 17)
var file_lextwt_proto_goTypes = []any{
(Code_Type)(0), // 0: Code.Type
(Link_Type)(0), // 1: Link.Type
(*LatestTwts)(nil), // 2: LatestTwts
(*TwtRegistry)(nil), // 3: TwtRegistry
(*BangMention)(nil), // 4: BangMention
(*Code)(nil), // 5: Code
(*Comment)(nil), // 6: Comment
(*DateTime)(nil), // 7: DateTime
(*LineSeparator)(nil), // 8: LineSeparator
(*Link)(nil), // 9: Link
(*Mention)(nil), // 10: Mention
(*Subject)(nil), // 11: Subject
(*Tag)(nil), // 12: Tag
(*Text)(nil), // 13: Text
(*Twter)(nil), // 14: Twter
(*Elem)(nil), // 15: Elem
(*Twt)(nil), // 16: Twt
(*Pager)(nil), // 3: Pager
(*TwtRegistry)(nil), // 4: TwtRegistry
(*TwtFeed)(nil), // 5: TwtFeed
(*BangMention)(nil), // 6: BangMention
(*Code)(nil), // 7: Code
(*Comment)(nil), // 8: Comment
(*DateTime)(nil), // 9: DateTime
(*LineSeparator)(nil), // 10: LineSeparator
(*Link)(nil), // 11: Link
(*Mention)(nil), // 12: Mention
(*Subject)(nil), // 13: Subject
(*Tag)(nil), // 14: Tag
(*Text)(nil), // 15: Text
(*Twter)(nil), // 16: Twter
(*Elem)(nil), // 17: Elem
(*Twt)(nil), // 18: Twt
}
var file_lextwt_proto_depIdxs = []int32{
6, // 0: TwtRegistry.preamble:type_name -> Comment
14, // 1: TwtRegistry.twters:type_name -> Twter
16, // 2: TwtRegistry.twts:type_name -> Twt
0, // 3: Code.type:type_name -> Code.Type
1, // 4: Link.type:type_name -> Link.Type
12, // 5: Subject.tag:type_name -> Tag
4, // 6: Elem.bangmention:type_name -> BangMention
5, // 7: Elem.code:type_name -> Code
6, // 8: Elem.comment:type_name -> Comment
8, // 9: Elem.lineseparator:type_name -> LineSeparator
9, // 10: Elem.link:type_name -> Link
10, // 11: Elem.mention:type_name -> Mention
11, // 12: Elem.subject:type_name -> Subject
12, // 13: Elem.tag:type_name -> Tag
13, // 14: Elem.text:type_name -> Text
14, // 15: Twt.twter:type_name -> Twter
7, // 16: Twt.created:type_name -> DateTime
15, // 17: Twt.msg:type_name -> Elem
2, // 18: TwtRegistryService.latestTwts:input_type -> LatestTwts
3, // 19: TwtRegistryService.latestTwts:output_type -> TwtRegistry
19, // [19:20] is the sub-list for method output_type
18, // [18:19] is the sub-list for method input_type
18, // [18:18] is the sub-list for extension type_name
18, // [18:18] is the sub-list for extension extendee
0, // [0:18] is the sub-list for field type_name
8, // 0: TwtRegistry.preamble:type_name -> Comment
18, // 1: TwtRegistry.twts:type_name -> Twt
16, // 2: TwtFeed.twter:type_name -> Twter
8, // 3: TwtFeed.preamble:type_name -> Comment
18, // 4: TwtFeed.twts:type_name -> Twt
0, // 5: Code.type:type_name -> Code.Type
1, // 6: Link.type:type_name -> Link.Type
14, // 7: Subject.tag:type_name -> Tag
6, // 8: Elem.bangmention:type_name -> BangMention
7, // 9: Elem.code:type_name -> Code
8, // 10: Elem.comment:type_name -> Comment
10, // 11: Elem.lineseparator:type_name -> LineSeparator
11, // 12: Elem.link:type_name -> Link
12, // 13: Elem.mention:type_name -> Mention
13, // 14: Elem.subject:type_name -> Subject
14, // 15: Elem.tag:type_name -> Tag
15, // 16: Elem.text:type_name -> Text
16, // 17: Twt.twter:type_name -> Twter
9, // 18: Twt.created:type_name -> DateTime
17, // 19: Twt.msg:type_name -> Elem
2, // 20: TwtRegistryService.latestTwts:input_type -> LatestTwts
3, // 21: TwtRegistryService.users:input_type -> Pager
4, // 22: TwtRegistryService.latestTwts:output_type -> TwtRegistry
4, // 23: TwtRegistryService.users:output_type -> TwtRegistry
22, // [22:24] is the sub-list for method output_type
20, // [20:22] is the sub-list for method input_type
20, // [20:20] is the sub-list for extension type_name
20, // [20:20] is the sub-list for extension extendee
0, // [0:20] is the sub-list for field type_name
}
func init() { file_lextwt_proto_init() }
@ -1220,7 +1321,7 @@ func file_lextwt_proto_init() {
if File_lextwt_proto != nil {
return
}
file_lextwt_proto_msgTypes[13].OneofWrappers = []any{
file_lextwt_proto_msgTypes[15].OneofWrappers = []any{
(*Elem_Bangmention)(nil),
(*Elem_Code)(nil),
(*Elem_Comment)(nil),
@ -1237,7 +1338,7 @@ func file_lextwt_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_lextwt_proto_rawDesc), len(file_lextwt_proto_rawDesc)),
NumEnums: 2,
NumMessages: 15,
NumMessages: 17,
NumExtensions: 0,
NumServices: 1,
},