Skip to content

Commit

Permalink
update README
Browse files Browse the repository at this point in the history
  • Loading branch information
shockerli committed Sep 6, 2022
1 parent 0364156 commit 4d970a5
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 602 deletions.
301 changes: 2 additions & 299 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,306 +66,9 @@ cvt.Float("hello", 12.34) // 12.34
> 1000+ unit test cases, for more examples, see `*_test.go`

## API

### bool
- Bool

```go
cvt.Bool(0) // false
cvt.Bool(nil) // false
cvt.Bool("0") // false
cvt.Bool("false") // false
cvt.Bool([]int{}) // false

cvt.Bool(true) // true
cvt.Bool("true") // true
cvt.Bool([]int{1, 2}) // true
cvt.Bool([]byte("true")) // true
```

- BoolE

```go
cvt.BoolE(0) // false,nil
cvt.BoolE(nil) // false,nil
cvt.BoolE("0") // false,nil
cvt.BoolE("false") // false,nil
cvt.BoolE([]int{}) // false,nil

cvt.BoolE(true) // true,nil
cvt.BoolE("true") // true,nil
cvt.BoolE([]int{1, 2}) // true,nil
cvt.BoolE([]byte("true")) // true,nil
```

- BoolP
```go
cvt.BoolP("true") // (*bool)(0x14000126180)(true)
```

> more case see [bool_test.go](bool_test.go)

### int
- Int
- IntE
- IntP
- Int8
- Int8E
- Int8P
- Int16
- Int16E
- Int16P
- Int32
- Int32E
- Int32P
- Int64
- Int64E
- Int64P
- Uint
- UintE
- UintP
- Uint8
- Uint8E
- Uint8P
- Uint16
- Uint16E
- Uint16P
- Uint32
- Uint32E
- Uint32P
- Uint64
- Uint64E
- Uint64P

```go
cvt.Int(int8(8)) // 8
cvt.Int(int32(8)) // 8
cvt.Int("-8.01") // -8
cvt.Int([]byte("8.00")) // 8
cvt.Int(nil) // 0
cvt.IntE("8a") // 0,err
cvt.IntE([]int{}) // 0,err

// alias type
type OrderType uint8
cvt.Int(OrderType(3)) // 3

var po OrderType = 3
cvt.Int(&po) // 3

cvt.IntP("12") // (*int)(0x140000a4180)(12)
```

> more case see [int_test.go](int_test.go)

### string
- String
- StringE
- StringP

```go
cvt.String(uint(8)) // "8"
cvt.String(float32(8.31)) // "8.31"
cvt.String(true) // "true"
cvt.String([]byte("-8.01")) // "-8.01"
cvt.String(nil) // ""

cvt.String(errors.New("error info")) // "error info"
cvt.String(time.Friday) // "Friday"
cvt.String(big.NewInt(123)) // "123"
cvt.String(template.URL("https://host.foo")) // "https://host.foo"
cvt.String(template.HTML("<html></html>")) // "<html></html>"
cvt.String(json.Number("12.34")) // "12.34"

// custom type
type TestMarshalJSON struct{}

func (TestMarshalJSON) MarshalJSON() ([]byte, error) {
return []byte("custom marshal"), nil
}
cvt.String(TestMarshalJSON{}) // "custom marshal"
cvt.String(&TestMarshalJSON{}) // "custom marshal"

cvt.StringP(8.31) // (*string)(0x14000110320)((len=3) "123")
```

> more case see [string_test.go](string_test.go)

### float
- Float32
- Float32E
- Float32P
- Float64
- Float64E
- Float64P

```go
cvt.Float64(int32(8)) // 8
cvt.Float64(float32(8.31)) // 8.31
cvt.Float64("-8") // 8
cvt.Float64("-8.01") // 8.01
cvt.Float64(nil) // 0
cvt.Float64(true) // 1
cvt.Float64(false) // 0

type AliasTypeInt int
type PointerTypeInt *AliasTypeInt
cvt.Float64(AliasTypeInt(8)) // 8
cvt.Float64((*AliasTypeInt)(nil)) // 0
cvt.FLoat64((*PointerTypeInt)(nil)) // 0

cvt.Float64P("12.3") // (*float64)(0x14000126180)(12.3)
```

> more case see [float_test.go](float_test.go)
### time
- Time
- TimeE

```go
cvt.Time("2009-11-10 23:00:00 +0000 UTC")
cvt.Time("2018-10-21T23:21:29+0200")
cvt.Time("10 Nov 09 23:00 UTC")
cvt.Time("2009-11-10T23:00:00Z")
cvt.Time("11:00PM")
cvt.Time("2006-01-02")
cvt.Time("2016-03-06 15:28:01")
cvt.Time(1482597504)
cvt.Time(time.Date(2009, 2, 13, 23, 31, 30, 0, time.Local))
```

> more case see [time_test.go](time_test.go)
### slice
- `ColumnsE`: the values from a single column in the input array/slice/map of struct/map, `[]interface{}`

```go
// []interface{}{"D1", "D2", nil}
cvt.ColumnsE([]map[string]interface{}{
{"1": 111, "DDD": "D1"},
{"2": 222, "DDD": "D2"},
{"DDD": nil},
}, "DDD")

// test type
type TestStructD struct {
D1 int
}
type TestStructE struct {
D1 int
DD *TestStructD
}

// []interface{}{11, 22}
cvt.ColumnsE(map[int]TestStructD{1: {11}, 2: {22}}, "D1")

// []interface{}{1, 2}
cvt.ColumnsE([]TestStructE{{D1: 1}, {D1: 2}}, "D1")
```

- `FieldE`: the field value from map/struct, `interface{}`

```go
// map
cvt.FieldE(map[int]interface{}{123: "112233"}, "123") // "112233"
cvt.FieldE(map[string]interface{}{"123": "112233"}, "123") // "112233"

// struct
cvt.FieldE(struct{
A string
B int
}{"Hello", 18}, "A") // "Hello"
cvt.FieldE(struct{
A string
B int
}{"Hello", 18}, "B") // 18
```

- `KeysE`: the keys of map, or fields of struct, `[]interface{}`

```go
cvt.KeysE()
// key of map
cvt.KeysE(map[float64]float64{0.1: -0.1, -1.2: 1.2}) // []interface{}{-1.2, 0.1}
cvt.KeysE(map[string]interface{}{"A": 1, "2": 2}) // []interface{}{"2", "A"}
cvt.KeysE(map[int]map[string]interface{}{1: {"1": 111, "DDD": 12.3}, -2: {"2": 222, "DDD": "321"}, 3: {"DDD": nil}}) // []interface{}{-2, 1, 3}

// field name of struct
cvt.KeysE(struct{
A string
B int
C float
}{}) // []interface{}{"A", "B", "C"}

type TestStructB {
B int
}
cvt.KeysE(struct{
A string
TestStructB
C float
}{}) // []interface{}{"A", "B", "C"}
```

- `Slice` / `SliceE`: convert an interface to a `[]interface{}` type
- `SliceIntE`: convert an interface to a `[]int` type
- `SliceInt64E`: convert an interface to a `[]int64` type
- `SliceFloat64E`: convert an interface to a `[]float64` type
- `SliceStringE`: convert an interface to a `[]string` type

```go
cvt.SliceE("hello") // []interface{}{'h', 'e', 'l', 'l', 'o'}
cvt.SliceE([]byte("hey")) // []interface{}{byte('h'), byte('e'), byte('y')}
cvt.SliceE([]int{1, 2, 3}) // []interface{}{1, 2, 3}
cvt.SliceE([]string{"a", "b", "c"}) // []interface{}{"a", "b", "c"}
cvt.SliceE(map[int]string{1: "111", 2: "222"}) // []interface{}{"111", "222"}

// struct values
type TestStruct struct {
A int
B string
}
cvt.SliceE(TestStruct{18,"jhon"}) // []interface{}{18, "jhon"}

// SliceIntE
cvt.SliceIntE([]string{"1", "2", "3"}) // []int{1, 2, 3}
cvt.SliceIntE(map[int]string{2: "222", 1: "111"}) // []int{111, 222}

// SliceStringE
cvt.SliceStringE([]float64{1.1, 2.2, 3.0}) // []string{"1.1", "2.2", "3"}
cvt.SliceStringE(map[int]string{2: "222", 1: "11.1"}) // []string{"11.1", "222"}
```

> more case see [slice_test.go](slice_test.go)

### map
- StringMapE

```go
// JSON
// expect: map[string]interface{}{"name": "cvt", "age": 3.21}
cvt.StringMapE(`{"name":"cvt","age":3.21}`)

// Map
// expect: map[string]interface{}{"111": "cvt", "222": 3.21}
cvt.StringMapE(map[interface{}]interface{}{111: "cvt", "222": 3.21})

// Struct
// expect: map[string]interface{}{"Name": "cvt", "Age": 3}
cvt.StringMapE(struct {
Name string
Age int
}{"cvt", 3})
```

> more case see [map_test.go](map_test.go)
## Documents

https://cvt.shockerli.net


## License
Expand Down
Loading

1 comment on commit 4d970a5

@vercel
Copy link

@vercel vercel bot commented on 4d970a5 Sep 6, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.