github.com/moreal/bencodex-go@v0.0.0-20231021172012-18277a477d15/internal/bytes_like.go (about) 1 package internal 2 3 import ( 4 "errors" 5 ) 6 7 type BencodexBytesLike struct { 8 isBytes bool 9 raw string 10 } 11 12 func (b *BencodexBytesLike) MustAsString() string { 13 if b.isBytes { 14 panic("It is not string.") 15 } 16 17 return b.raw 18 } 19 20 func (b *BencodexBytesLike) MustAsBytes() []byte { 21 if !b.isBytes { 22 panic("It is not bytes.") 23 } 24 25 return S2B(b.raw) 26 } 27 28 func (b *BencodexBytesLike) AsString() (string, error) { 29 if b.isBytes { 30 return "", errors.New("It is bytes.") 31 } 32 33 return b.raw, nil 34 } 35 36 func (b *BencodexBytesLike) IsString() bool { 37 return !b.isBytes 38 } 39 40 func (b *BencodexBytesLike) IsBytes() bool { 41 return b.isBytes 42 } 43 44 func (b *BencodexBytesLike) AsBytes() ([]byte, error) { 45 if !b.isBytes { 46 return nil, errors.New("It is string.") 47 } 48 49 return S2B(b.raw), nil 50 } 51 52 func (b *BencodexBytesLike) Len() int { 53 return len(b.raw) 54 } 55 56 func NewBytes(b []byte) BencodexBytesLike { 57 return BencodexBytesLike{ 58 isBytes: true, 59 raw: B2S(b), 60 } 61 } 62 63 func NewString(s string) BencodexBytesLike { 64 return BencodexBytesLike{ 65 isBytes: false, 66 raw: s, 67 } 68 }