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 } { if d.clientSettings != nil { { s += (*d.clientSettings).Size() } s += 0 } } { l := uint64(len(d.lastIP)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } s += 9 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 } { if d.clientSettings == nil { buf[i+8] = 0 } else { buf[i+8] = 1 { nbuf, err := (*d.clientSettings).Marshal(buf[i+9:]) if err != nil { return nil, err } i += uint64(len(nbuf)) } i += 0 } } { l := uint64(len(d.lastIP)) { t := uint64(l) for t >= 0x80 { buf[i+9] = byte(t) | 0x80 t >>= 7 i++ } buf[i+9] = byte(t) i++ } copy(buf[i+9:], d.lastIP) i += l } return buf[:i+9], 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 } { if buf[i+8] == 1 { if d.clientSettings == nil { d.clientSettings = new(ClientSettings) } { ni, err := (*d.clientSettings).Unmarshal(buf[i+9:]) if err != nil { return 0, err } i += ni } i += 0 } else { d.clientSettings = nil } } { l := uint64(0) { bs := uint8(7) t := uint64(buf[i+9] & 0x7F) for buf[i+9]&0x80 == 0x80 { i++ t |= uint64(buf[i+9]&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+9:]) i += l } return i + 9, nil } func (d *ClientSettings) Size() (s uint64) { s += 1 return } func (d *ClientSettings) Marshal(buf []byte) ([]byte, error) { size := d.Size() { if uint64(cap(buf)) >= size { buf = buf[:size] } else { buf = make([]byte, size) } } i := uint64(0) { if d.ColoredNicks { buf[0] = 1 } else { buf[0] = 0 } } return buf[:i+1], nil } func (d *ClientSettings) Unmarshal(buf []byte) (uint64, error) { i := uint64(0) { d.ColoredNicks = buf[0] == 1 } return i + 1, nil } func (d *Network) 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.ServerPassword)) { 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 } { l := uint64(len(d.Account)) { 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 } s += 1 return } func (d *Network) 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.ServerPassword)) { 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.ServerPassword) 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 } { l := uint64(len(d.Account)) { 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.Account) i += l } { 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 } return buf[:i+1], nil } func (d *Network) 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.ServerPassword = 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 } { 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.Account = 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.Password = string(buf[i+1 : i+1+l]) i += l } return i + 1, nil } func (d *Channel) Size() (s uint64) { { l := uint64(len(d.Network)) { 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 } 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.Network)) { 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.Network) 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 } 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.Network = 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 } 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 } { l := uint64(len(d.Events)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } for k0 := range d.Events { { s += d.Events[k0].Size() } } } 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 } { l := uint64(len(d.Events)) { t := uint64(l) for t >= 0x80 { buf[i+8] = byte(t) | 0x80 t >>= 7 i++ } buf[i+8] = byte(t) i++ } for k0 := range d.Events { { nbuf, err := d.Events[k0].Marshal(buf[i+8:]) if err != nil { return nil, err } i += uint64(len(nbuf)) } } } 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])) } { 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.Events)) >= l { d.Events = d.Events[:l] } else { d.Events = make([]Event, l) } for k0 := range d.Events { { ni, err := d.Events[k0].Unmarshal(buf[i+8:]) if err != nil { return 0, err } i += ni } } } return i + 8, nil } func (d *Event) Size() (s uint64) { { l := uint64(len(d.Type)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } { l := uint64(len(d.Params)) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } for k0 := range d.Params { { l := uint64(len(d.Params[k0])) { t := l for t >= 0x80 { t >>= 7 s++ } s++ } s += l } } } s += 8 return } func (d *Event) 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.Type)) { 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.Type) i += l } { l := uint64(len(d.Params)) { t := uint64(l) for t >= 0x80 { buf[i+0] = byte(t) | 0x80 t >>= 7 i++ } buf[i+0] = byte(t) i++ } for k0 := range d.Params { { l := uint64(len(d.Params[k0])) { 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.Params[k0]) i += l } } } { *(*int64)(unsafe.Pointer(&buf[i+0])) = d.Time } return buf[:i+8], nil } func (d *Event) 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.Type = 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 } if uint64(cap(d.Params)) >= l { d.Params = d.Params[:l] } else { d.Params = make([]string, l) } for k0 := range d.Params { { 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.Params[k0] = string(buf[i+0 : i+0+l]) i += l } } } { d.Time = *(*int64)(unsafe.Pointer(&buf[i+0])) } return i + 8, nil }