Something went wrong. Try again.
Go bindings to the Rust Yrs library that implements the Yjs CRDT
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697package sync
import "errors"
const ( MessageSync uint8 = 0 MessageAwareness uint8 = 1 MessageAuth uint8 = 2 MessageAwarenessQuery uint8 = 3)
const ( SyncStep1 uint8 = 0 SyncStep2 uint8 = 1 Update uint8 = 2)
func writeVarUint(b []byte, v uint64) int { i := 0 for { b[i] = byte(v & 0x7f) v >>= 7 if v == 0 { i++ break } b[i] |= 0x80 i++ } return i}
func readVarUint(b []byte) (uint64, int, error) { if len(b) == 0 { return 0, 0, errors.New("unexpected end of input") } var result uint64 var shift uint i := 0 for { if i >= len(b) { return 0, 0, errors.New("unexpected end of input") } chunk := uint64(b[i]) result |= (chunk & 0x7f) << shift i++ if chunk&0x80 == 0 { break } shift += 7 if shift > 63 { return 0, 0, errors.New("varint overflow") } } return result, i, nil}
func encodeVarByteArray(data []byte) []byte { encoded := make([]byte, 0, 10+len(data)) encoded = appendVarUint(encoded, uint64(len(data))) encoded = append(encoded, data...) return encoded}
func encodeMessage(msgType uint8, payload []byte) []byte { msg := make([]byte, 0, 2+len(payload)) msg = appendVarUint(msg, uint64(msgType)) msg = appendVarByteArray(msg, payload) return msg}
func encodeSyncMessage(innerType uint8, payload []byte) []byte { msg := make([]byte, 0, 2+len(payload)) msg = appendVarUint(msg, uint64(MessageSync)) msg = appendVarUint(msg, uint64(innerType)) msg = appendVarByteArray(msg, payload) return msg}
func encodeAwarenessMessage(payload []byte) []byte { msg := make([]byte, 0, 2+len(payload)) msg = appendVarUint(msg, uint64(MessageAwareness)) msg = appendVarByteArray(msg, payload) return msg}
func appendVarUint(b []byte, v uint64) []byte { var buf [10]byte n := writeVarUint(buf[:], v) return append(b, buf[:n]...)}
func appendVarByteArray(b []byte, data []byte) []byte { b = appendVarUint(b, uint64(len(data))) return append(b, data...)}