gussy up docs for release (#193)
make TryInto use fully specified as std::convert::TryInto
This commit is contained in:
parent
04c59d7857
commit
7e5dc6586c
143
README.md
143
README.md
|
@ -1,12 +1,19 @@
|
||||||
# Progenitor
|
# Progenitor
|
||||||
|
|
||||||
Progenitor is a Rust crate for generating opinionated clients from API
|
Progenitor is a Rust crate for generating opinionated clients from API
|
||||||
descriptions specified in the OpenAPI 3.0.x format. It makes use of Rust
|
descriptions in the OpenAPI 3.0.x specification. It makes use of Rust
|
||||||
futures for async API calls and `Streams` for paginated interfaces.
|
futures for `async` API calls and `Streams` for paginated interfaces.
|
||||||
|
|
||||||
It generates a type called `Client` with methods that correspond to the
|
It generates a type called `Client` with methods that correspond to the
|
||||||
operations specified in the OpenAPI document.
|
operations specified in the OpenAPI document.
|
||||||
|
|
||||||
|
The primary target is OpenAPI documents emitted by
|
||||||
|
[Dropshot](https://github.com/oxidecomputer/dropshot)-generated APIs, but it
|
||||||
|
can be used for many OpenAPI documents. As OpenAPI covers a wide range of APIs,
|
||||||
|
Progenitor may fail for some OpenAPI documents. If you encounter a problem, you
|
||||||
|
can help the project by filing an issue that includes the OpenAPI document that
|
||||||
|
produced the problem.
|
||||||
|
|
||||||
## Using Progenitor
|
## Using Progenitor
|
||||||
|
|
||||||
There are three different ways of using the `progenitor` crate. The one you
|
There are three different ways of using the `progenitor` crate. The one you
|
||||||
|
@ -64,7 +71,7 @@ generate_api!(
|
||||||
Note that the macro will be re-evaluated when the OpenAPI json document
|
Note that the macro will be re-evaluated when the OpenAPI json document
|
||||||
changes (when its mtime is updated).
|
changes (when its mtime is updated).
|
||||||
|
|
||||||
### Builder
|
### `build.rs`
|
||||||
|
|
||||||
Progenitor includes an interface appropriate for use in a
|
Progenitor includes an interface appropriate for use in a
|
||||||
[`build.rs`](https://doc.rust-lang.org/cargo/reference/build-scripts.html)
|
[`build.rs`](https://doc.rust-lang.org/cargo/reference/build-scripts.html)
|
||||||
|
@ -154,3 +161,133 @@ uuid = { version = ">=0.8.0, <2.0.0", features = ["serde", "v4"] }
|
||||||
|
|
||||||
Note that there is a dependency on `percent-encoding` which macro- and
|
Note that there is a dependency on `percent-encoding` which macro- and
|
||||||
build.rs-generated clients is included from `progenitor-client`.
|
build.rs-generated clients is included from `progenitor-client`.
|
||||||
|
|
||||||
|
|
||||||
|
## Generation Styles
|
||||||
|
|
||||||
|
Progenitor can generate two distinct interface styles: positional and builder
|
||||||
|
(described below). The choice is simply a matter of preference that many vary
|
||||||
|
by API and taste.
|
||||||
|
|
||||||
|
## Positional (current default)
|
||||||
|
|
||||||
|
The "positional" style generates `Client` methods that accept parameters in
|
||||||
|
order, for example:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
impl Client {
|
||||||
|
pub async fn instance_create<'a>(
|
||||||
|
&'a self,
|
||||||
|
organization_name: &'a types::Name,
|
||||||
|
project_name: &'a types::Name,
|
||||||
|
body: &'a types::InstanceCreate,
|
||||||
|
) -> Result<ResponseValue<types::Instance>, Error<types::Error>> {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
A caller invokes this interface by specifying parameters by position:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
let result = client.instance_create(org, proj, body).await?;
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that the type of each parameter must match precisely--no conversion is
|
||||||
|
done implicitly.
|
||||||
|
|
||||||
|
## Builder
|
||||||
|
|
||||||
|
The "builder" style generates `Client` methods that produce a builder struct.
|
||||||
|
API parameters are applied to that builder, and then the builder is executed
|
||||||
|
(via a `send` method). The code is more extensive and more complex to enable
|
||||||
|
simpler and more legible consumers:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
impl Client
|
||||||
|
pub fn instance_create(&self) -> builder::InstanceCreate {
|
||||||
|
builder::InstanceCreate::new(self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mod builder {
|
||||||
|
pub struct InstanceCreate<'a> {
|
||||||
|
client: &'a super::Client,
|
||||||
|
organization_name: Result<types::Name, String>,
|
||||||
|
project_name: Result<types::Name, String>,
|
||||||
|
body: Result<types::InstanceCreate, String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> InstanceCreate<'a> {
|
||||||
|
pub fn new(client: &'a super::Client) -> Self {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn organization_name<V>(mut self, value: V) -> Self
|
||||||
|
where
|
||||||
|
V: TryInto<types::Name>,
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn project_name<V>(mut self, value: V) -> Self
|
||||||
|
where
|
||||||
|
V: TryInto<types::Name>,
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
|
where
|
||||||
|
V: TryInto<types::InstanceCreate>,
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn send(self) ->
|
||||||
|
Result<ResponseValue<types::Instance>, Error<types::Error>>
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that, unlike positional generation, consumers can supply compatible
|
||||||
|
(rather than invariant) parameters:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
let result = client
|
||||||
|
.instance_create()
|
||||||
|
.organization_name("org")
|
||||||
|
.project_name("proj")
|
||||||
|
.body(body)
|
||||||
|
.send()
|
||||||
|
.await?;
|
||||||
|
```
|
||||||
|
|
||||||
|
The string parameters are will implicitly have `TryFrom::try_from()` invoked on
|
||||||
|
them. Failed conversions or missing required parameters will result in an
|
||||||
|
`Error` result from the `send()` call.
|
||||||
|
|
||||||
|
Generated `struct` types also have builders so that the `body` parameter can be
|
||||||
|
constructed inline:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
let result = client
|
||||||
|
.instance_create()
|
||||||
|
.organization_name("org")
|
||||||
|
.project_name("proj")
|
||||||
|
.body(types::InstanceCreate::builder()
|
||||||
|
.name("...")
|
||||||
|
.description("...")
|
||||||
|
.hostname("...")
|
||||||
|
.ncpus(types::InstanceCpuCount(4))
|
||||||
|
.memory(types::ByteCount(1024 * 1024 * 1024)),
|
||||||
|
)
|
||||||
|
.send()
|
||||||
|
.await?;
|
||||||
|
```
|
||||||
|
|
||||||
|
Consumers do not need to specify parameters and struct properties that are not
|
||||||
|
required or for which the API specifies defaults. Neat!
|
|
@ -0,0 +1,140 @@
|
||||||
|
# Builder Generation
|
||||||
|
|
||||||
|
When the "builder" style is specified, Progenitor generates methods and builder
|
||||||
|
struct according to operations within an OpenAPI document. They take the
|
||||||
|
following general form:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
impl Client {
|
||||||
|
pub fn operation_name(&self) -> builder::InstanceCreate {
|
||||||
|
builder::OperationName::new(self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mod builder {
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub struct OperationName<'a> {
|
||||||
|
client: &'a super::Client,
|
||||||
|
|
||||||
|
path_parameter_1: Result<String, String>,
|
||||||
|
path_parameter_2: Result<u32, String>,
|
||||||
|
query_parameter_1: Result<String, String>,
|
||||||
|
query_parameter_2: Result<Option<u32>, String>,
|
||||||
|
body: Result<types::ThisOperationBody, String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> OperationName<'a> {
|
||||||
|
pub fn new(client: &'a super::Client) -> Self {
|
||||||
|
Self {
|
||||||
|
client,
|
||||||
|
path_parameter_1: Err("path_parameter_1 was not initialized".to_string()),
|
||||||
|
path_parameter_2: Err("path_parameter_2 was not initialized".to_string()),
|
||||||
|
query_parameter_1: Err("query_parameter_1 was not initialized".to_string()),
|
||||||
|
query_parameter_2: Ok(None),
|
||||||
|
body: Err("body was not initialized".to_string()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn path_parameter_1<V>(mut self, value: V) -> Self
|
||||||
|
where
|
||||||
|
V: std::convert::TryInto<String>,
|
||||||
|
{
|
||||||
|
self.organization_name = value
|
||||||
|
.try_into()
|
||||||
|
.map_err(|_| "conversion to `String` for path_parameter_1 failed".to_string());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn path_parameter_2<V>(mut self, value: V) -> Self
|
||||||
|
where
|
||||||
|
V: std::convert::TryInto<u32>,
|
||||||
|
{
|
||||||
|
self.organization_name = value
|
||||||
|
.try_into()
|
||||||
|
.map_err(|_| "conversion to `u32` for path_parameter_2 failed".to_string());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn query_parameter_1<V>(mut self, value: V) -> Self
|
||||||
|
where
|
||||||
|
V: std::convert::TryInto<String>,
|
||||||
|
{
|
||||||
|
self.organization_name = value
|
||||||
|
.try_into()
|
||||||
|
.map_err(|_| "conversion to `String` for query_parameter_1 failed".to_string());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn query_parameter_2<V>(mut self, value: V) -> Self
|
||||||
|
where
|
||||||
|
V: std::convert::TryInto<u32>,
|
||||||
|
{
|
||||||
|
self.organization_name = value
|
||||||
|
.try_into()
|
||||||
|
.map_err(|_| "conversion to `u32` for query_parameter_2 failed".to_string());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
|
where
|
||||||
|
V: TryInto<types::ThisOperationBody>,
|
||||||
|
{
|
||||||
|
self.body = value
|
||||||
|
.try_into()
|
||||||
|
.map_err(|_| "conversion to `ThisOperationBody` for body failed".to_string());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn send(self) -> Result<
|
||||||
|
ResponseValue<types::SuccessResponseType>,
|
||||||
|
Error<types::ErrorResponseType>,
|
||||||
|
> {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
For more info on the `ResponseValue<T>` and `Error<E>` types, see
|
||||||
|
[progenitor_client](./progenitor-client.md).
|
||||||
|
|
||||||
|
Note that `send` methods are `async` so must be `await`ed to get the response value.
|
||||||
|
|
||||||
|
### Dropshot Paginated Operations
|
||||||
|
|
||||||
|
Dropshot defines a mechanism for pagination. If that mechanism is used for a
|
||||||
|
particular operation, Progenitor will generate an additional `stream` method on
|
||||||
|
the builder struct that produces a `Stream`. Consumers can iterate over all
|
||||||
|
items in the paginated collection without manually fetching individual pages.
|
||||||
|
|
||||||
|
Here's the signature for a typical generated method:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
impl<'a> OperationName<'a> {
|
||||||
|
pub fn stream(
|
||||||
|
self,
|
||||||
|
) -> impl futures::Stream<
|
||||||
|
Item = Result<types::SuccessResponseType, Error<types::ErrorResponseType>>
|
||||||
|
> + Unpin + 'a {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
A typical consumer of this method might look like this:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
let mut stream = client.operation_name().stream();
|
||||||
|
loop {
|
||||||
|
match stream.try_next().await {
|
||||||
|
Ok(Some(item)) => println!("item {:?}", item),
|
||||||
|
Ok(None) => {
|
||||||
|
println!("done.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Err(_) => {
|
||||||
|
println!("error!");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
|
@ -1,14 +1,17 @@
|
||||||
# Implementing the client
|
# Implementing the client
|
||||||
|
|
||||||
Once you have generated your client, you'll notice there are two methods to create a new client; `Client::new()` and `Client::new_with_client()`.
|
Once you have generated your client, you'll notice there are two methods to
|
||||||
|
create a new `Client`; `Client::new()` and `Client::new_with_client()`.
|
||||||
|
|
||||||
The first method will create a basic client without any headers or customisations that aren't already in your OpenAPI specification file:
|
The first method will create a basic client without any headers or
|
||||||
|
customizations that aren't already in your OpenAPI specification file:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
let client = Client::new("https://foo/bar");
|
let client = Client::new("https://foo/bar");
|
||||||
```
|
```
|
||||||
|
|
||||||
Should you need to set custom headers or other reqwest::ClientBuilder methods, you can use `Client::new_with_client()` as shown below.
|
Should you need to set custom headers or other `reqwest::ClientBuilder`
|
||||||
|
methods, you can use `Client::new_with_client()` as shown below.
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
let mut val = reqwest::header::HeaderValue::from_static("super-secret");
|
let mut val = reqwest::header::HeaderValue::from_static("super-secret");
|
||||||
|
@ -28,4 +31,6 @@ let client_builder = reqwest::ClientBuilder::new()
|
||||||
let client Client::new_with_client("https://foo/bar", client_builder);
|
let client Client::new_with_client("https://foo/bar", client_builder);
|
||||||
```
|
```
|
||||||
|
|
||||||
For more information on available methods, see the [reqwest](https://docs.rs/reqwest/latest/reqwest/struct.ClientBuilder.html) documentation.
|
For more information on available methods, see the
|
||||||
|
[reqwest](https://docs.rs/reqwest/latest/reqwest/struct.ClientBuilder.html)
|
||||||
|
documentation.
|
|
@ -1,7 +1,8 @@
|
||||||
# Generated Methods
|
# Positional Generation
|
||||||
|
|
||||||
Progenitor generates methods according to operations within an OpenAPI
|
When the "positional" style is specified, Progenitor generates methods
|
||||||
document. Each method takes the following general form:
|
according to operations within an OpenAPI document. Each takes the following
|
||||||
|
general form:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
impl Client {
|
impl Client {
|
||||||
|
@ -14,24 +15,25 @@ impl Client {
|
||||||
query_parameter_1: String,
|
query_parameter_1: String,
|
||||||
query_parameter_2: Option<u32>,
|
query_parameter_2: Option<u32>,
|
||||||
// A body parameter (if specified) comes last
|
// A body parameter (if specified) comes last
|
||||||
body: &ThisOperationBody,
|
body: &types::ThisOperationBody,
|
||||||
) -> Result<
|
) -> Result<
|
||||||
ResponseValue<types::SuccessResponseType>,
|
ResponseValue<types::SuccessResponseType>,
|
||||||
Error<types::ErrorResponseType>
|
Error<types::ErrorResponseType>,
|
||||||
> {
|
> {
|
||||||
..
|
// ...
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
For more info on the `ResponseValue<T>` and `Error<E>` types, see
|
For more info on the `ResponseValue<T>` and `Error<E>` types, see
|
||||||
[progenitor_client](./progenitor-client.md).
|
[progenitor_client](./progenitor-client.md).
|
||||||
|
|
||||||
Note that methods are `async` so must be `await`ed to get the response.
|
Note that methods are `async` so must be `await`ed to get the response value.
|
||||||
|
|
||||||
### Dropshot Paginated Operations
|
### Dropshot Paginated Operations
|
||||||
|
|
||||||
The Dropshot crate defines a mechanism for pagination. If that mechanism is
|
Dropshot defines a mechanism for pagination. If that mechanism is used for a
|
||||||
used for a particular operation, Progenitor will generate an additional method
|
particular operation, Progenitor will generate an additional method that
|
||||||
that produces a `Stream`. Consumers can iterate over all items in the paginated
|
produces a `Stream`. Consumers can iterate over all items in the paginated
|
||||||
collection without manually fetching individual pages.
|
collection without manually fetching individual pages.
|
||||||
|
|
||||||
Here's the signature for a typical generated method:
|
Here's the signature for a typical generated method:
|
||||||
|
@ -44,7 +46,8 @@ Here's the signature for a typical generated method:
|
||||||
) -> impl futures::Stream<
|
) -> impl futures::Stream<
|
||||||
Item = Result<types::SuccessResponseType, Error<types::ErrorResponseType>>
|
Item = Result<types::SuccessResponseType, Error<types::ErrorResponseType>>
|
||||||
> + Unpin + '_ {
|
> + Unpin + '_ {
|
||||||
..
|
// ...
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
A typical consumer of this method might look like this:
|
A typical consumer of this method might look like this:
|
|
@ -25,7 +25,8 @@ impl Client {
|
||||||
ResponseValue<types::SuccessResponseType>,
|
ResponseValue<types::SuccessResponseType>,
|
||||||
Error<types::ErrorResponseType>>
|
Error<types::ErrorResponseType>>
|
||||||
{
|
{
|
||||||
..
|
// ...
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## `ResponseValue<T>`
|
## `ResponseValue<T>`
|
||||||
|
@ -64,7 +65,9 @@ It can be used as the type `T` in most instances and extracted as a `T` using
|
||||||
|
|
||||||
There are five sub-categories of error covered by the error type variants:
|
There are five sub-categories of error covered by the error type variants:
|
||||||
|
|
||||||
- A request that did not conform to API requirements. This can occur when required builder or body parameters were not specified, and the error message will denote the specific failure.
|
- A request that did not conform to API requirements. This can occur when
|
||||||
|
required builder or body parameters were not specified, and the error message
|
||||||
|
will denote the specific failure.
|
||||||
|
|
||||||
- A communication error
|
- A communication error
|
||||||
|
|
||||||
|
|
|
@ -324,8 +324,6 @@ impl Generator {
|
||||||
RequestBuilderExt,
|
RequestBuilderExt,
|
||||||
ResponseValue,
|
ResponseValue,
|
||||||
};
|
};
|
||||||
#[allow(unused_imports)]
|
|
||||||
use std::convert::TryInto;
|
|
||||||
|
|
||||||
#(#builder_struct)*
|
#(#builder_struct)*
|
||||||
}
|
}
|
||||||
|
|
|
@ -1129,14 +1129,14 @@ impl Generator {
|
||||||
/// ```ignore
|
/// ```ignore
|
||||||
/// impl<'a> OperationId<'a> {
|
/// impl<'a> OperationId<'a> {
|
||||||
/// pub fn param_1<V>(self, value: V)
|
/// pub fn param_1<V>(self, value: V)
|
||||||
/// where V: TryInto<SomeType>
|
/// where V: std::convert::TryInto<SomeType>
|
||||||
/// {
|
/// {
|
||||||
/// self.param_1 = value.try_into()
|
/// self.param_1 = value.try_into()
|
||||||
/// .map_err(|_| #err_msg.to_string());
|
/// .map_err(|_| #err_msg.to_string());
|
||||||
/// self
|
/// self
|
||||||
/// }
|
/// }
|
||||||
/// pub fn param_2<V>(self, value: V)
|
/// pub fn param_2<V>(self, value: V)
|
||||||
/// where V: TryInto<SomeType>
|
/// where V: std::convert::TryInto<SomeType>
|
||||||
/// {
|
/// {
|
||||||
/// self.param_2 = value.try_into()
|
/// self.param_2 = value.try_into()
|
||||||
/// .map(Some)
|
/// .map(Some)
|
||||||
|
@ -1264,7 +1264,7 @@ impl Generator {
|
||||||
Ok(quote! {
|
Ok(quote! {
|
||||||
pub fn #param_name<V>(mut self, value: V)
|
pub fn #param_name<V>(mut self, value: V)
|
||||||
-> Self
|
-> Self
|
||||||
where V: TryInto<#typ>
|
where V: std::convert::TryInto<#typ>
|
||||||
{
|
{
|
||||||
self.#param_name = value.try_into()
|
self.#param_name = value.try_into()
|
||||||
.map(Some)
|
.map(Some)
|
||||||
|
@ -1277,7 +1277,7 @@ impl Generator {
|
||||||
let typ = ty.ident();
|
let typ = ty.ident();
|
||||||
Ok(quote! {
|
Ok(quote! {
|
||||||
pub fn #param_name<V>(mut self, value: V) -> Self
|
pub fn #param_name<V>(mut self, value: V) -> Self
|
||||||
where V: TryInto<#typ>,
|
where V: std::convert::TryInto<#typ>,
|
||||||
{
|
{
|
||||||
self.#param_name = value.try_into()
|
self.#param_name = value.try_into()
|
||||||
.map_err(|_| #err_msg.to_string());
|
.map_err(|_| #err_msg.to_string());
|
||||||
|
@ -1294,7 +1294,7 @@ impl Generator {
|
||||||
|
|
||||||
Ok(quote! {
|
Ok(quote! {
|
||||||
pub fn #param_name<B>(mut self, value: B) -> Self
|
pub fn #param_name<B>(mut self, value: B) -> Self
|
||||||
where B: TryInto<reqwest::Body>
|
where B: std::convert::TryInto<reqwest::Body>
|
||||||
{
|
{
|
||||||
self.#param_name = value.try_into()
|
self.#param_name = value.try_into()
|
||||||
.map_err(|_| #err_msg.to_string());
|
.map_err(|_| #err_msg.to_string());
|
||||||
|
|
|
@ -1574,7 +1574,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1647,7 +1647,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::TaskSubmit>,
|
V: std::convert::TryInto<types::TaskSubmit>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1691,7 +1691,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1701,7 +1701,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn minseq<V>(mut self, value: V) -> Self
|
pub fn minseq<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<u32>,
|
V: std::convert::TryInto<u32>,
|
||||||
{
|
{
|
||||||
self.minseq = value
|
self.minseq = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1757,7 +1757,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1805,7 +1805,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1815,7 +1815,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn output<V>(mut self, value: V) -> Self
|
pub fn output<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.output = value
|
self.output = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1867,7 +1867,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::UserCreate>,
|
V: std::convert::TryInto<types::UserCreate>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1936,7 +1936,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::WorkerBootstrap>,
|
V: std::convert::TryInto<types::WorkerBootstrap>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2007,7 +2007,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2017,7 +2017,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::WorkerAppendTask>,
|
V: std::convert::TryInto<types::WorkerAppendTask>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2066,7 +2066,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2076,7 +2076,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<B>(mut self, value: B) -> Self
|
pub fn body<B>(mut self, value: B) -> Self
|
||||||
where
|
where
|
||||||
B: TryInto<reqwest::Body>,
|
B: std::convert::TryInto<reqwest::Body>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2133,7 +2133,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2143,7 +2143,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::WorkerCompleteTask>,
|
V: std::convert::TryInto<types::WorkerCompleteTask>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2192,7 +2192,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2202,7 +2202,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::WorkerAddOutput>,
|
V: std::convert::TryInto<types::WorkerAddOutput>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
|
|
@ -1501,8 +1501,6 @@ pub mod builder {
|
||||||
use super::types;
|
use super::types;
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use super::{encode_path, ByteStream, Error, RequestBuilderExt, ResponseValue};
|
use super::{encode_path, ByteStream, Error, RequestBuilderExt, ResponseValue};
|
||||||
#[allow(unused_imports)]
|
|
||||||
use std::convert::TryInto;
|
|
||||||
///Builder for [`Client::control_hold`]
|
///Builder for [`Client::control_hold`]
|
||||||
///
|
///
|
||||||
///[`Client::control_hold`]: super::Client::control_hold
|
///[`Client::control_hold`]: super::Client::control_hold
|
||||||
|
@ -1576,7 +1574,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1649,7 +1647,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::TaskSubmit>,
|
V: std::convert::TryInto<types::TaskSubmit>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1693,7 +1691,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1703,7 +1701,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn minseq<V>(mut self, value: V) -> Self
|
pub fn minseq<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<u32>,
|
V: std::convert::TryInto<u32>,
|
||||||
{
|
{
|
||||||
self.minseq = value
|
self.minseq = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1759,7 +1757,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1807,7 +1805,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1817,7 +1815,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn output<V>(mut self, value: V) -> Self
|
pub fn output<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.output = value
|
self.output = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1869,7 +1867,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::UserCreate>,
|
V: std::convert::TryInto<types::UserCreate>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1938,7 +1936,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::WorkerBootstrap>,
|
V: std::convert::TryInto<types::WorkerBootstrap>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2009,7 +2007,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2019,7 +2017,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::WorkerAppendTask>,
|
V: std::convert::TryInto<types::WorkerAppendTask>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2068,7 +2066,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2078,7 +2076,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<B>(mut self, value: B) -> Self
|
pub fn body<B>(mut self, value: B) -> Self
|
||||||
where
|
where
|
||||||
B: TryInto<reqwest::Body>,
|
B: std::convert::TryInto<reqwest::Body>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2135,7 +2133,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2145,7 +2143,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::WorkerCompleteTask>,
|
V: std::convert::TryInto<types::WorkerCompleteTask>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2194,7 +2192,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn task<V>(mut self, value: V) -> Self
|
pub fn task<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<String>,
|
V: std::convert::TryInto<String>,
|
||||||
{
|
{
|
||||||
self.task = value
|
self.task = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -2204,7 +2202,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::WorkerAddOutput>,
|
V: std::convert::TryInto<types::WorkerAddOutput>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
|
|
@ -849,7 +849,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::EnrolBody>,
|
V: std::convert::TryInto<types::EnrolBody>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -945,7 +945,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::ReportFinishBody>,
|
V: std::convert::TryInto<types::ReportFinishBody>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -987,7 +987,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::ReportOutputBody>,
|
V: std::convert::TryInto<types::ReportOutputBody>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1029,7 +1029,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::ReportStartBody>,
|
V: std::convert::TryInto<types::ReportStartBody>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
|
|
@ -830,8 +830,6 @@ pub mod builder {
|
||||||
use super::types;
|
use super::types;
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use super::{encode_path, ByteStream, Error, RequestBuilderExt, ResponseValue};
|
use super::{encode_path, ByteStream, Error, RequestBuilderExt, ResponseValue};
|
||||||
#[allow(unused_imports)]
|
|
||||||
use std::convert::TryInto;
|
|
||||||
///Builder for [`Client::enrol`]
|
///Builder for [`Client::enrol`]
|
||||||
///
|
///
|
||||||
///[`Client::enrol`]: super::Client::enrol
|
///[`Client::enrol`]: super::Client::enrol
|
||||||
|
@ -851,7 +849,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::EnrolBody>,
|
V: std::convert::TryInto<types::EnrolBody>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -947,7 +945,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::ReportFinishBody>,
|
V: std::convert::TryInto<types::ReportFinishBody>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -989,7 +987,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::ReportOutputBody>,
|
V: std::convert::TryInto<types::ReportOutputBody>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
@ -1031,7 +1029,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::ReportStartBody>,
|
V: std::convert::TryInto<types::ReportStartBody>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -237,8 +237,6 @@ pub mod builder {
|
||||||
use super::types;
|
use super::types;
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use super::{encode_path, ByteStream, Error, RequestBuilderExt, ResponseValue};
|
use super::{encode_path, ByteStream, Error, RequestBuilderExt, ResponseValue};
|
||||||
#[allow(unused_imports)]
|
|
||||||
use std::convert::TryInto;
|
|
||||||
///Builder for [`Client::default_params`]
|
///Builder for [`Client::default_params`]
|
||||||
///
|
///
|
||||||
///[`Client::default_params`]: super::Client::default_params
|
///[`Client::default_params`]: super::Client::default_params
|
||||||
|
@ -258,7 +256,7 @@ pub mod builder {
|
||||||
|
|
||||||
pub fn body<V>(mut self, value: V) -> Self
|
pub fn body<V>(mut self, value: V) -> Self
|
||||||
where
|
where
|
||||||
V: TryInto<types::BodyWithDefaults>,
|
V: std::convert::TryInto<types::BodyWithDefaults>,
|
||||||
{
|
{
|
||||||
self.body = value
|
self.body = value
|
||||||
.try_into()
|
.try_into()
|
||||||
|
|
Loading…
Reference in New Issue