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  }