mirror of
https://github.com/coder/coder.git
synced 2025-07-09 11:45:56 +00:00
* feat: Support generating generics in interfaces * Switch struct to a template * Support generics in apitypings
44 lines
1.3 KiB
Go
44 lines
1.3 KiB
Go
package generics
|
|
|
|
import "time"
|
|
|
|
type Single interface {
|
|
string
|
|
}
|
|
|
|
type Custom interface {
|
|
string | bool | int | time.Duration | []string | *int
|
|
}
|
|
|
|
// StaticGeneric has all generic fields defined in the field
|
|
type StaticGeneric struct {
|
|
Static GenericFields[string, int, time.Duration, string] `json:"static"`
|
|
}
|
|
|
|
// DynamicGeneric can has some dynamic fields
|
|
type DynamicGeneric[A any, S Single] struct {
|
|
Dynamic GenericFields[bool, A, string, S] `json:"dynamic"`
|
|
Comparable bool `json:"comparable"`
|
|
}
|
|
|
|
type ComplexGeneric[C comparable, S Single, T Custom] struct {
|
|
Dynamic GenericFields[C, bool, string, S] `json:"dynamic"`
|
|
Order GenericFieldsDiffOrder[C, string, S, T] `json:"order"`
|
|
Comparable C `json:"comparable"`
|
|
Single S `json:"single"`
|
|
Static StaticGeneric `json:"static"`
|
|
}
|
|
|
|
type GenericFields[C comparable, A any, T Custom, S Single] struct {
|
|
Comparable C `json:"comparable"`
|
|
Any A `json:"any"`
|
|
|
|
Custom T `json:"custom"`
|
|
Again T `json:"again"`
|
|
SingleConstraint S `json:"single_constraint"`
|
|
}
|
|
|
|
type GenericFieldsDiffOrder[A any, C comparable, S Single, T Custom] struct {
|
|
GenericFields[C, A, T, S]
|
|
}
|