Coder Social home page Coder Social logo

tools's Introduction

SCIM Tools

This repository/module contains various utility functions to make it easier to work with SCIM servers and clients.

! most packages are a wip

Fuzzer

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]

Encoder

A simple encoder that converts structs to maps based on their tags.

Tags
  • multiValued (or mV)
    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]

Decoder

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}}

Struct Generator

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
// }

tools's People

Contributors

q-uint avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.