The change here is to make it easier for the consumer to debug the api.
Such that they can `match` on individual errors instead of having to
parse text.
eyre is convenient, but mostly from a consumers perspective
Option has been removed as a wrapper around opts. This makes it much
more convenient to use
```rust
client.container_opts(Some(ContainerOpts{}))
// ->
client.container_opts(ContainerOpts{})
```
The same options are still available, either an empty object can be
passed, or a non _opts function can be used
Now all opt values enter into a _opts function instead of the original.
This avoids a lot of verbosity for both None in the case opts are
unwanted, and Some() if they actually are.
They are used like so:
```rust
client.container().from("...");
client.container_opts(Some(ContainerOpts{ ... }))
```
Some from opts will be removed in a future commit/pr
This will make the api much easier to use, as we can now rely on ""
instead of "".into() for normal string values.
Introduced builder as well, which makes it much easier to use *Opts, as
it can handle the building of that, and get the benefits from String ->
&str, as that is currently not allowed for optional values
* format code
* with object gen and args
* add implementation
* add rust generator
* reset generated code
* add basic output
* reset output
* add object
* add format function
* with opts
* fix vec
* add context to unwrap
* fix arguments
* with function body
* first complete generation: Still missing Vec<Obj>
* run full alpine
* add roadmap item