{{define "exchanges validate" -}}
{{template "header" .}}
## Current Features for {{.Name}}

+ This package allows for validation options to occur exchange side e.g.
	- Checking for ID in an order cancellation struct.
	- Determining the correct withdrawal bank details for a specific exchange.

+ Example Usage below:

```go 
// import package
"github.com/thrasher-corp/exchanges/validate"

// define your data structure across potential exchanges
type Critical struct {
	ID string
	Person string
	Banks string
	MoneysUSD float64
}

// define validation and add a variadic param
func (supercritcalinfo *Critical) Validate(opt ...validate.Checker) error {
	// define base level validation
	if supercritcalinfo != nil {
			// oh no this is nil, could panic program!
	}

	// range over potential checks coming from individual packages
	var errs common.Errors
	for _, o := range opt {
		err := o.Check()
		if err != nil {
			errs = append(errs, err)
		}
	}

	if errs != nil {
		return errs
	}
	return nil
}

// define an exchange or package level check that returns a validate.Checker 
// interface
func (supercritcalinfo *Critical) PleaseDontSendMoneyToParents() validate.Checker {
	return validate.Check(func() error {
		if supercritcalinfo.Person == "Mother Dearest" ||
			supercritcalinfo.Person == "Father Dearest" {
			return errors.New("nope")
		}
	return nil
	})
}


// Now in the package all you have to do is add in your options or not...
d := Critical{Person: "Mother Dearest", MoneysUSD: 1337.30}

// This should not error 
err := d.Validate()
if err != nil {
	return err
}

// This should error 
err := d.Validate(d.PleaseDontSendMoneyToParents())
if err != nil {
	return err
}

```

### Please click GoDocs chevron above to view current GoDoc information for this package
{{template "contributions"}}
{{template "donations" .}}
{{end}}