Y3
Версия: draft-02.
Статус: WIP.
Y3 — это реализация на Golang Y3 Codec, который представляет собой быстрый и низкозатратный по ресурсам процессорный кодировщик и декодировщик данных, ориентированный на периферийные вычисления и потоковую обработку.
Дополнительную информацию можно найти в разделе explainer и о способах комбинирования с YoMo.
См. Y3 Codec SPEC.
go test ./...
.
go get -u github.com/yomorun/y3-codec-golang
.
package main
import (
"fmt"
y3 "github.com/yomorun/y3-codec-golang"
)
func main() {
// если мы хотим представить `var obj = &foo{ID: -1, bar: &bar{Name: "C"}}`
// в Y3-Codec:
// 0x81 -> узел
var foo = y3.NewNodePacketEncoder(0x01)
// 0x02 -> foo.ID=-11
var yp1 = y3.NewPrimitivePacketEncoder(0x02)
yp1.SetInt32Value(-1)
foo.AddPrimitivePacket(yp1)
// 0x83 -> &bar{}
var bar = y3.NewNodePacketEncoder(0x03)
// 0x04 -> bar.Name="C"
var yp2 = y3.NewPrimitivePacketEncoder(0x04)
yp2.SetStringValue("C")
bar.AddPrimitivePacket(yp2)
// -> foo.bar=&bar
foo.AddNodePacket(bar)
fmt.Printf("res=%#v", foo.Encode()) // res=[]byte{0x81, 0x08, 0x02, 0x01, 0x7F, 0x83, 0x03, 0x04, 0x01, 0x43}
}
package main
import (
"fmt"
y3 "github.com/yomorun/y3-codec-golang"
)
func main() {
fmt.Println(">> Разбор [0x0A, 0x01, 0x7F], что похоже на формат Ключ-Значение = 0x0A: 127")
buf := []byte{0x0A, 0x01, 0x7F}
res, _, err := y3.DecodePrimitivePacket(buf)
v1, err := res.ToUInt32()
if err != nil {
panic(err)
}
fmt.Printf("Tag Key=[%#X], Value=%v\n", res.SeqID(), v1)
}
package main
import (
"fmt"
y3 "github.com/yomorun/y3-codec-golang"
)
func main() {
fmt.Println(">> Разбор [0x84, 0x06, 0x0A, 0x01, 0x7F, 0x0B, 0x01, 0x43] ЭКВИВАЛЕНТ JSON= 0x84: { 0x0A: -1, 0x0B: 'C' }")
buf := []byte{0x84, 0x06, 0x0A, 0x01, 0x7F, 0x0B, 0x01, 0x43}
res, _, err := y3.DecodeNodePacket(buf)
v1 := res.PrimitivePackets[0]
p1, err := v1.ToInt32()
if err != nil {
panic(err)
}
fmt.Printf("Tag Key=[%#X.%#X], Value=%v\n", res.SeqID(), v1.SeqID(), p1)
v2 := res.PrimitivePackets[1]
p2, err := v2.ToUTF8String()
if err != nil {
panic(err)
}
fmt.Printf("Tag Key=[%#X.%#X], Value=%v\n", res.SeqID(), v2.SeqID(), p2)
}
Дополнительные примеры в /examples/
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )