This is inspired from Ben Johnson's blog post [Failure is Your Domain](https://middlemost.com/failure-is-your-domain/)
## The Error struct
```go
type Error struct {
Code string
Msg string
Op string
Err error
}
```
* Code is the machine readable code, for reference purpose. All the codes should be a constant string. For example. `const ENotFound = "source not found"`.
* Msg is the human readable message for end user. For example, `Your credit card is declined.`
* Op is the logical Operator, should be a constant defined inside the function. For example: "bolt.UserCreate".
* Err is the embed error. You may embed either a third party error or and platform.Error.