/
mws-cloud-platform
/
go-sdk
Обзор
Документация
Войти
/
mws-cloud-platform
/
go-sdk
Код
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
internal/conv/encode.go
199 строк
7 KB
romanov-is-here
code sync
16 янв 2026, 08:07
Верифицирован
16 янв 2026, 08:07
92da9c1
Код
Авторство
О чём код?
package conv import ( "encoding/base64" "io" "math/big" "net/netip" "net/url" "strconv" "time" "github.com/google/uuid" "github.com/shopspring/decimal" "go.mws.cloud/go-sdk/pkg/apimodels/units/bitrate" "go.mws.cloud/go-sdk/pkg/apimodels/units/bytesize" "go.mws.cloud/go-sdk/pkg/apimodels/units/frequency" "go.mws.cloud/go-sdk/pkg/apimodels/units/largenumber" "go.mws.cloud/go-sdk/pkg/apimodels/units/throughput" ) // Вероятно не все методы понадобятся. Пока что просто их скопировал из ogen func IntToString(v int) string { return strconv.Itoa(v) } func Int8ToString(v int8) string { return strconv.FormatInt(int64(v), 10) } func Int16ToString(v int16) string { return strconv.FormatInt(int64(v), 10) } func Int32ToString(v int32) string { return strconv.FormatInt(int64(v), 10) } func Int64ToString(v int64) string { return strconv.FormatInt(v, 10) } func UintToString(v uint) string { return strconv.FormatUint(uint64(v), 10) } func Uint8ToString(v uint8) string { return strconv.FormatUint(uint64(v), 10) } func Uint16ToString(v uint16) string { return strconv.FormatUint(uint64(v), 10) } func Uint32ToString(v uint32) string { return strconv.FormatUint(uint64(v), 10) } func Uint64ToString(v uint64) string { return strconv.FormatUint(v, 10) } func Float32ToString(v float32) string { return strconv.FormatFloat(float64(v), 'f', 10, 64) } func Float64ToString(v float64) string { return strconv.FormatFloat(v, 'f', 10, 64) } func BoolToString(v bool) string { return strconv.FormatBool(v) } func StringToString(v string) string { return v } func StringToStringErr(v string) (string, error) { return v, nil } func BytesToString(v []byte) string { return string(v) } func StringToStringSubset[T ~string](s string) T { return T(s) } func TimeToString(v time.Time) string { return v.Format(timeLayout) } func TimeUTCToString(v time.Time) string { return v.UTC().Format(timeLayout) } func DateToString(v time.Time) string { return v.Format(dateLayout) } func DateUTCToString(v time.Time) string { return v.UTC().Format(dateLayout) } func DateTimeToString(v time.Time) string { return v.Format(time.RFC3339) } func DateTimeUTCToString(v time.Time) string { return v.UTC().Format(time.RFC3339) } func UnixSecondsToString(v time.Time) string { return StringInt64ToString(v.Unix()) } func UnixNanoToString(v time.Time) string { return StringInt64ToString(v.UnixNano()) } func UnixMicroToString(v time.Time) string { return StringInt64ToString(v.UnixMicro()) } func UnixMilliToString(v time.Time) string { return StringInt64ToString(v.UnixMilli()) } func DurationToString(v time.Duration) string { return v.String() } func UUIDToString(v uuid.UUID) string { return v.String() } func AddrToString(v netip.Addr) string { return v.String() } func URLToString(v url.URL) string { return v.String() } func StringIntToString(v int) string { return strconv.FormatInt(int64(v), 10) } func StringInt8ToString(v int8) string { return strconv.FormatInt(int64(v), 10) } func StringInt16ToString(v int16) string { return strconv.FormatInt(int64(v), 10) } func StringInt32ToString(v int32) string { return strconv.FormatInt(int64(v), 10) } func StringInt64ToString(v int64) string { return strconv.FormatInt(v, 10) } func StringUintToString(v uint) string { return strconv.FormatUint(uint64(v), 10) } func StringUint8ToString(v uint8) string { return strconv.FormatUint(uint64(v), 10) } func StringUint16ToString(v uint16) string { return strconv.FormatUint(uint64(v), 10) } func StringUint32ToString(v uint32) string { return strconv.FormatUint(uint64(v), 10) } func StringUint64ToString(v uint64) string { return strconv.FormatUint(v, 10) } func StringFloat32ToString(v float32) string { return strconv.FormatFloat(float64(v), 'g', 10, 32) } func StringFloat64ToString(v float64) string { return strconv.FormatFloat(v, 'g', 10, 64) } func encodeArray[T any](vs []T, encode func(T) string) []string { strs := make([]string, len(vs)) for i, v := range vs { strs[i] = encode(v) } return strs } func Int32ArrayToString(vs []int32) []string { return encodeArray(vs, Int32ToString) } func Int64ArrayToString(vs []int64) []string { return encodeArray(vs, Int64ToString) } func Float32ArrayToString(vs []float32) []string { return encodeArray(vs, Float32ToString) } func Float64ArrayToString(vs []float64) []string { return encodeArray(vs, Float64ToString) } func StringArrayToString(vs []string) []string { return vs } func BytesArrayToString(vs [][]byte) []string { return encodeArray(vs, BytesToString) } func TimeArrayToString(vs []time.Time) []string { return encodeArray(vs, TimeToString) } func BoolArrayToString(vs []bool) []string { return encodeArray(vs, BoolToString) } func UUIDArrayToString(vs []uuid.UUID) []string { return encodeArray(vs, UUIDToString) } func BitrateToString(b bitrate.Bitrate, unit bitrate.Unit) string { return valueToString(b, unit, bitrate.BITS.String()) } func ByteSizeToString(b bytesize.ByteSize, unit bytesize.Unit) string { return valueToString(b, unit, bytesize.B.String()) } func FrequencyToString(f frequency.Frequency, unit frequency.Unit) string { return valueToString(f, unit, frequency.HZ.String()) } func LargeNumberToString(l largenumber.LargeNumber, unit largenumber.Unit) string { return valueToString(l, unit, largenumber.EmptyUnit.String()) } func ThroughputToString(t throughput.Throughput, unit throughput.Unit) string { return valueToString(t, unit, throughput.BPS.String()) } func EncodeBase64(w io.Writer, payload []byte) error { encoder := base64.NewEncoder(base64.StdEncoding, w) if _, err := encoder.Write(payload); err != nil { return err } return encoder.Close() } func valueToString[U unitKind[U]](value valueUnit, unit U, minUnitString string) string { if value.BigInt().Cmp(big.NewInt(0)) == 0 { // largenumber emptyUnitStr is empty if minUnitString != "" { return "0 " + minUnitString } return "0" } var ( oneDecimal = decimal.NewFromInt(1) valid = true result string ) for ; valid; unit, valid = unit.Decrease() { result = unitToString(value, unit) if divideUnit(value.BigInt(), unit.GetValue()).GreaterThanOrEqual(oneDecimal) { break } } return result } type valueUnit interface { BigInt() *big.Int } type unitKind[T any] interface { GetValue() *big.Int String() string Decrease() (T, bool) } func unitToString[T any](v valueUnit, u unitKind[T]) string { return divideUnit(v.BigInt(), u.GetValue()).String() + " " + u.String() } func divideUnit(base, unit *big.Int) decimal.Decimal { const roundPlaces = 2 baseQuantityDecimal := decimal.NewFromBigInt(base, 0) unitDecimal := decimal.NewFromBigInt(unit, 0) if unitDecimal.IsZero() { unitDecimal = decimal.NewFromInt(1) } return baseQuantityDecimal.Div(unitDecimal).Round(roundPlaces) }