package storage import ( "io" "time" "unsafe" ) var ( _ = unsafe.Sizeof(0) _ = io.ReadFull _ = time.Now() ) func (d *User) Size() (s uint64) { { l := uint64(len(d.Username)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } { l := uint64(len(d.lastIP)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } s += 8 return } func (d *User) Marshal(buf []byte) ([]byte, error) { size := d.Size() { if uint64(cap(buf)) >= size { buf = buf[:size] } else { buf = make([]byte, size) } } i := uint64(0) { *(*uint64)(unsafe.Pointer(&buf[0])) = d.ID } { l := uint64(len(d.Username)) { t := uint64(l) for t >= 0x80 { buf[i+8] = byte(t) | 0x80 t >>= 7 i++ } buf[i+8] = byte(t) i++ } copy(buf[i+8:], d.Username) i += l } { l := uint64(len(d.lastIP)) { t := uint64(l) for t >= 0x80 { buf[i+8] = byte(t) | 0x80 t >>= 7 i++ } buf[i+8] = byte(t) i++ } copy(buf[i+8:], d.lastIP) i += l } return buf[:i+8], nil } func (d *User) Unmarshal(buf []byte) (uint64, error) { i := uint64(0) { d.ID = *(*uint64)(unsafe.Pointer(&buf[i+0])) } { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+8] & 0x7F) for buf[i+8]&0x80 == 0x80 { i++ t |= uint64(buf[i+8]&0x7F) << bs bs += 7 } i++ l = t } d.Username = string(buf[i+8 : i+8+l]) i += l } { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+8] & 0x7F) for buf[i+8]&0x80 == 0x80 { i++ t |= uint64(buf[i+8]&0x7F) << bs bs += 7 } i++ l = t } if uint64(cap(d.lastIP)) >= l { d.lastIP = d.lastIP[:l] } else { d.lastIP = make([]byte, l) } copy(d.lastIP, buf[i+8:]) i += l } return i + 8, nil } func (d *Server) Size() (s uint64) { { l := uint64(len(d.Name)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } { l := uint64(len(d.Host)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } { l := uint64(len(d.Port)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } { l := uint64(len(d.Password)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } { l := uint64(len(d.Nick)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } { l := uint64(len(d.Username)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } { l := uint64(len(d.Realname)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } s += 1 return } func (d *Server) Marshal(buf []byte) ([]byte, error) { size := d.Size() { if uint64(cap(buf)) >= size { buf = buf[:size] } else { buf = make([]byte, size) } } i := uint64(0) { l := uint64(len(d.Name)) { t := uint64(l) for t >= 0x80 { buf[i+0] = byte(t) | 0x80 t >>= 7 i++ } buf[i+0] = byte(t) i++ } copy(buf[i+0:], d.Name) i += l } { l := uint64(len(d.Host)) { t := uint64(l) for t >= 0x80 { buf[i+0] = byte(t) | 0x80 t >>= 7 i++ } buf[i+0] = byte(t) i++ } copy(buf[i+0:], d.Host) i += l } { l := uint64(len(d.Port)) { t := uint64(l) for t >= 0x80 { buf[i+0] = byte(t) | 0x80 t >>= 7 i++ } buf[i+0] = byte(t) i++ } copy(buf[i+0:], d.Port) i += l } { if d.TLS { buf[i+0] = 1 } else { buf[i+0] = 0 } } { l := uint64(len(d.Password)) { t := uint64(l) for t >= 0x80 { buf[i+1] = byte(t) | 0x80 t >>= 7 i++ } buf[i+1] = byte(t) i++ } copy(buf[i+1:], d.Password) i += l } { l := uint64(len(d.Nick)) { t := uint64(l) for t >= 0x80 { buf[i+1] = byte(t) | 0x80 t >>= 7 i++ } buf[i+1] = byte(t) i++ } copy(buf[i+1:], d.Nick) i += l } { l := uint64(len(d.Username)) { t := uint64(l) for t >= 0x80 { buf[i+1] = byte(t) | 0x80 t >>= 7 i++ } buf[i+1] = byte(t) i++ } copy(buf[i+1:], d.Username) i += l } { l := uint64(len(d.Realname)) { t := uint64(l) for t >= 0x80 { buf[i+1] = byte(t) | 0x80 t >>= 7 i++ } buf[i+1] = byte(t) i++ } copy(buf[i+1:], d.Realname) i += l } return buf[:i+1], nil } func (d *Server) Unmarshal(buf []byte) (uint64, error) { i := uint64(0) { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+0] & 0x7F) for buf[i+0]&0x80 == 0x80 { i++ t |= uint64(buf[i+0]&0x7F) << bs bs += 7 } i++ l = t } d.Name = string(buf[i+0 : i+0+l]) i += l } { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+0] & 0x7F) for buf[i+0]&0x80 == 0x80 { i++ t |= uint64(buf[i+0]&0x7F) << bs bs += 7 } i++ l = t } d.Host = string(buf[i+0 : i+0+l]) i += l } { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+0] & 0x7F) for buf[i+0]&0x80 == 0x80 { i++ t |= uint64(buf[i+0]&0x7F) << bs bs += 7 } i++ l = t } d.Port = string(buf[i+0 : i+0+l]) i += l } { d.TLS = buf[i+0] == 1 } { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+1] & 0x7F) for buf[i+1]&0x80 == 0x80 { i++ t |= uint64(buf[i+1]&0x7F) << bs bs += 7 } i++ l = t } d.Password = string(buf[i+1 : i+1+l]) i += l } { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+1] & 0x7F) for buf[i+1]&0x80 == 0x80 { i++ t |= uint64(buf[i+1]&0x7F) << bs bs += 7 } i++ l = t } d.Nick = string(buf[i+1 : i+1+l]) i += l } { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+1] & 0x7F) for buf[i+1]&0x80 == 0x80 { i++ t |= uint64(buf[i+1]&0x7F) << bs bs += 7 } i++ l = t } d.Username = string(buf[i+1 : i+1+l]) i += l } { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+1] & 0x7F) for buf[i+1]&0x80 == 0x80 { i++ t |= uint64(buf[i+1]&0x7F) << bs bs += 7 } i++ l = t } d.Realname = string(buf[i+1 : i+1+l]) i += l } return i + 1, nil } func (d *Channel) Size() (s uint64) { { l := uint64(len(d.Server)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } { l := uint64(len(d.Name)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } { l := uint64(len(d.Topic)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } return } func (d *Channel) Marshal(buf []byte) ([]byte, error) { size := d.Size() { if uint64(cap(buf)) >= size { buf = buf[:size] } else { buf = make([]byte, size) } } i := uint64(0) { l := uint64(len(d.Server)) { t := uint64(l) for t >= 0x80 { buf[i+0] = byte(t) | 0x80 t >>= 7 i++ } buf[i+0] = byte(t) i++ } copy(buf[i+0:], d.Server) i += l } { l := uint64(len(d.Name)) { t := uint64(l) for t >= 0x80 { buf[i+0] = byte(t) | 0x80 t >>= 7 i++ } buf[i+0] = byte(t) i++ } copy(buf[i+0:], d.Name) i += l } { l := uint64(len(d.Topic)) { t := uint64(l) for t >= 0x80 { buf[i+0] = byte(t) | 0x80 t >>= 7 i++ } buf[i+0] = byte(t) i++ } copy(buf[i+0:], d.Topic) i += l } return buf[:i+0], nil } func (d *Channel) Unmarshal(buf []byte) (uint64, error) { i := uint64(0) { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+0] & 0x7F) for buf[i+0]&0x80 == 0x80 { i++ t |= uint64(buf[i+0]&0x7F) << bs bs += 7 } i++ l = t } d.Server = string(buf[i+0 : i+0+l]) i += l } { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+0] & 0x7F) for buf[i+0]&0x80 == 0x80 { i++ t |= uint64(buf[i+0]&0x7F) << bs bs += 7 } i++ l = t } d.Name = string(buf[i+0 : i+0+l]) i += l } { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+0] & 0x7F) for buf[i+0]&0x80 == 0x80 { i++ t |= uint64(buf[i+0]&0x7F) << bs bs += 7 } i++ l = t } d.Topic = string(buf[i+0 : i+0+l]) i += l } return i + 0, nil } func (d *Message) Size() (s uint64) { { l := uint64(len(d.ID)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } { l := uint64(len(d.From)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } { l := uint64(len(d.Content)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } s += 8 return } func (d *Message) Marshal(buf []byte) ([]byte, error) { size := d.Size() { if uint64(cap(buf)) >= size { buf = buf[:size] } else { buf = make([]byte, size) } } i := uint64(0) { l := uint64(len(d.ID)) { t := uint64(l) for t >= 0x80 { buf[i+0] = byte(t) | 0x80 t >>= 7 i++ } buf[i+0] = byte(t) i++ } copy(buf[i+0:], d.ID) i += l } { l := uint64(len(d.From)) { t := uint64(l) for t >= 0x80 { buf[i+0] = byte(t) | 0x80 t >>= 7 i++ } buf[i+0] = byte(t) i++ } copy(buf[i+0:], d.From) i += l } { l := uint64(len(d.Content)) { t := uint64(l) for t >= 0x80 { buf[i+0] = byte(t) | 0x80 t >>= 7 i++ } buf[i+0] = byte(t) i++ } copy(buf[i+0:], d.Content) i += l } { *(*int64)(unsafe.Pointer(&buf[i+0])) = d.Time } return buf[:i+8], nil } func (d *Message) Unmarshal(buf []byte) (uint64, error) { i := uint64(0) { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+0] & 0x7F) for buf[i+0]&0x80 == 0x80 { i++ t |= uint64(buf[i+0]&0x7F) << bs bs += 7 } i++ l = t } d.ID = string(buf[i+0 : i+0+l]) i += l } { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+0] & 0x7F) for buf[i+0]&0x80 == 0x80 { i++ t |= uint64(buf[i+0]&0x7F) << bs bs += 7 } i++ l = t } d.From = string(buf[i+0 : i+0+l]) i += l } { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+0] & 0x7F) for buf[i+0]&0x80 == 0x80 { i++ t |= uint64(buf[i+0]&0x7F) << bs bs += 7 } i++ l = t } d.Content = string(buf[i+0 : i+0+l]) i += l } { d.Time = *(*int64)(unsafe.Pointer(&buf[i+0])) } return i + 8, nil }