saving changes to pb

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

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
}