This repository/module contains various utility functions to make it easier to work with SCIM servers and clients.
! most packages are a wip
Build on top of gofuzz.
var refSchema ReferenceSchema
// define the reference schema yourself or use unmarshal json
resource := New(refSchema).
// multi valued fields have one value.
NumElements(1, 1).
// displayName and name.givenName can never be empty.
NeverEmpty("displayName", "name.givenName").
// other fields are empty.
EmptyChance(1).
// create fuzzed resource.
Fuzz()
// OUTPUT: map[displayName:vWKdUsVprh name:map[givenName:ieVkQrrcKL] userName:RFlLpsMnBW]
A simple encoder that converts structs to maps based on their tags.
multiValued
(ormV
)
Makes the attribute multi valued.
type Name struct {
FirstName string `scim:"givenName"`
LastName string `scim:"familyName"`
}
type ResourceStruct struct {
UserName string
Name Name
}
resourceStruct := ResourceStruct{
UserName: "di-wu",
Name: Name{
FirstName: "Quint",
LastName: "Daenen",
},
}
resource, _ := Marshal(resourceStruct)
// OUTPUT: map[name:map[familyName:Daenen givenName:Quint] userName:di-wu]
A simple decoder that fills structs with maps.
! no pointers and tags supported
resourceMap := map[string]interface{}{
"userName": "di-wu",
"name": map[string]interface{}{
"firstName": "Quint",
"lastName": "Daenen",
},
}
var resource ResourceStruct
_ = Unmarshal(resourceMap, &resource)
// OUTPUT: {di-wu {Quint Daenen}}
Converts a schema to a structure representing the resource described in that schema.
g, _ := gen.NewStructGenerator(schema.ReferenceSchema{
Name: "User",
Attributes: []*schema.Attribute{
{
Name: "userName",
Required: true,
Uniqueness: schema.Server,
},
},
})
fmt.Print(g.Generate())
// Output:
// type User struct {
// ExternalId string
// Id string
// UserName string
// }