Add prelude for Client and extension traits (when they exist) (#176)
This commit is contained in:
parent
0a4cfc5281
commit
e79ac19ae7
|
@ -17,7 +17,9 @@ https://github.com/oxidecomputer/progenitor/compare/v0.1.1\...HEAD[Full list of
|
||||||
|
|
||||||
* Add support for a builder-style generation in addition to the positional style (#86)
|
* Add support for a builder-style generation in addition to the positional style (#86)
|
||||||
* Add support for body parameters with application/x-www-form-urlencoded media type (#109)
|
* Add support for body parameters with application/x-www-form-urlencoded media type (#109)
|
||||||
* Derive Debug for Client and builders for the various operations (#145)
|
* Derive `Debug` for `Client` and builders for the various operations (#145)
|
||||||
|
* Builders for `struct` types (#171)
|
||||||
|
* Add a prelude that include the `Client` and any extension traits (#176)
|
||||||
|
|
||||||
== 0.1.1 (released 2022-05-13)
|
== 0.1.1 (released 2022-05-13)
|
||||||
|
|
||||||
|
|
|
@ -283,6 +283,10 @@ impl Generator {
|
||||||
impl Client {
|
impl Client {
|
||||||
#(#methods)*
|
#(#methods)*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use super::Client;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
Ok(out)
|
Ok(out)
|
||||||
}
|
}
|
||||||
|
@ -321,6 +325,10 @@ impl Generator {
|
||||||
|
|
||||||
#(#builder_struct)*
|
#(#builder_struct)*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use self::super::Client;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(out)
|
Ok(out)
|
||||||
|
@ -335,7 +343,8 @@ impl Generator {
|
||||||
.map(|method| self.builder_struct(method, TagStyle::Separate))
|
.map(|method| self.builder_struct(method, TagStyle::Separate))
|
||||||
.collect::<Result<Vec<_>>>()?;
|
.collect::<Result<Vec<_>>>()?;
|
||||||
|
|
||||||
let traits_and_impls = self.builder_tags(input_methods);
|
let (traits_and_impls, trait_preludes) =
|
||||||
|
self.builder_tags(input_methods);
|
||||||
|
|
||||||
let out = quote! {
|
let out = quote! {
|
||||||
#traits_and_impls
|
#traits_and_impls
|
||||||
|
@ -352,6 +361,12 @@ impl Generator {
|
||||||
};
|
};
|
||||||
|
|
||||||
#(#builder_struct)*
|
#(#builder_struct)*
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use super::Client;
|
||||||
|
#trait_preludes
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1571,10 +1571,30 @@ impl Generator {
|
||||||
BuilderImpl { doc, sig, body }
|
BuilderImpl { doc, sig, body }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Generates a pair of TokenStreams.
|
||||||
|
///
|
||||||
|
/// The first includes all the operation code; impl Client for operations
|
||||||
|
/// with no tags and code of this form for each tag:
|
||||||
|
///
|
||||||
|
/// ```ignore
|
||||||
|
/// pub trait ClientTagExt {
|
||||||
|
/// ...
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
/// impl ClientTagExt for Client {
|
||||||
|
/// ...
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
///
|
||||||
|
/// The second is the code for the prelude for each tag extension trait:
|
||||||
|
///
|
||||||
|
/// ```ignore
|
||||||
|
/// pub use super::ClientTagExt;
|
||||||
|
/// ```
|
||||||
pub(crate) fn builder_tags(
|
pub(crate) fn builder_tags(
|
||||||
&self,
|
&self,
|
||||||
methods: &[OperationMethod],
|
methods: &[OperationMethod],
|
||||||
) -> TokenStream {
|
) -> (TokenStream, TokenStream) {
|
||||||
let mut base = Vec::new();
|
let mut base = Vec::new();
|
||||||
let mut ext = BTreeMap::new();
|
let mut ext = BTreeMap::new();
|
||||||
|
|
||||||
|
@ -1616,28 +1636,40 @@ impl Generator {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let ext_impl = ext.into_iter().map(|(tag, trait_methods)| {
|
let (ext_impl, ext_use): (Vec<_>, Vec<_>) = ext
|
||||||
let tr = format_ident!("Client{}Ext", sanitize(&tag, Case::Pascal));
|
.into_iter()
|
||||||
let (trait_methods, trait_impls): (
|
.map(|(tag, trait_methods)| {
|
||||||
Vec<TokenStream>,
|
let tr =
|
||||||
Vec<TokenStream>,
|
format_ident!("Client{}Ext", sanitize(&tag, Case::Pascal));
|
||||||
) = trait_methods.into_iter().unzip();
|
let (trait_methods, trait_impls): (
|
||||||
|
Vec<TokenStream>,
|
||||||
|
Vec<TokenStream>,
|
||||||
|
) = trait_methods.into_iter().unzip();
|
||||||
|
(
|
||||||
|
quote! {
|
||||||
|
pub trait #tr {
|
||||||
|
#(#trait_methods)*
|
||||||
|
}
|
||||||
|
|
||||||
|
impl #tr for Client {
|
||||||
|
#(#trait_impls)*
|
||||||
|
}
|
||||||
|
},
|
||||||
|
tr,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.unzip();
|
||||||
|
|
||||||
|
(
|
||||||
quote! {
|
quote! {
|
||||||
pub trait #tr {
|
#base_impl
|
||||||
#(#trait_methods)*
|
|
||||||
}
|
|
||||||
|
|
||||||
impl #tr for Client {
|
#(#ext_impl)*
|
||||||
#(#trait_impls)*
|
},
|
||||||
}
|
quote! {
|
||||||
}
|
#(pub use super::#ext_use;)*
|
||||||
});
|
},
|
||||||
|
)
|
||||||
quote! {
|
|
||||||
#base_impl
|
|
||||||
|
|
||||||
#(#ext_impl)*
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn builder_impl(&self, method: &OperationMethod) -> TokenStream {
|
pub(crate) fn builder_impl(&self, method: &OperationMethod) -> TokenStream {
|
||||||
|
|
|
@ -2284,3 +2284,7 @@ pub mod builder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use super::Client;
|
||||||
|
}
|
||||||
|
|
|
@ -2286,3 +2286,7 @@ pub mod builder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use self::super::Client;
|
||||||
|
}
|
||||||
|
|
|
@ -473,3 +473,7 @@ impl Client {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use super::Client;
|
||||||
|
}
|
||||||
|
|
|
@ -1052,3 +1052,7 @@ pub mod builder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use super::Client;
|
||||||
|
}
|
||||||
|
|
|
@ -1054,3 +1054,7 @@ pub mod builder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use self::super::Client;
|
||||||
|
}
|
||||||
|
|
|
@ -195,3 +195,7 @@ impl Client {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use super::Client;
|
||||||
|
}
|
||||||
|
|
|
@ -25408,3 +25408,27 @@ pub mod builder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use super::Client;
|
||||||
|
pub use super::ClientDisksExt;
|
||||||
|
pub use super::ClientHardwareExt;
|
||||||
|
pub use super::ClientHiddenExt;
|
||||||
|
pub use super::ClientImagesExt;
|
||||||
|
pub use super::ClientImagesGlobalExt;
|
||||||
|
pub use super::ClientInstancesExt;
|
||||||
|
pub use super::ClientIpPoolsExt;
|
||||||
|
pub use super::ClientLoginExt;
|
||||||
|
pub use super::ClientMetricsExt;
|
||||||
|
pub use super::ClientOrganizationsExt;
|
||||||
|
pub use super::ClientPolicyExt;
|
||||||
|
pub use super::ClientProjectsExt;
|
||||||
|
pub use super::ClientRolesExt;
|
||||||
|
pub use super::ClientSagasExt;
|
||||||
|
pub use super::ClientSessionExt;
|
||||||
|
pub use super::ClientSilosExt;
|
||||||
|
pub use super::ClientSnapshotsExt;
|
||||||
|
pub use super::ClientSystemExt;
|
||||||
|
pub use super::ClientUpdatesExt;
|
||||||
|
pub use super::ClientVpcsExt;
|
||||||
|
}
|
||||||
|
|
|
@ -25229,3 +25229,7 @@ pub mod builder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use self::super::Client;
|
||||||
|
}
|
||||||
|
|
|
@ -8776,3 +8776,7 @@ impl Client {
|
||||||
.boxed()
|
.boxed()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use super::Client;
|
||||||
|
}
|
||||||
|
|
|
@ -83,3 +83,7 @@ impl Client {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use super::Client;
|
||||||
|
}
|
||||||
|
|
|
@ -63,3 +63,7 @@ impl Client {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use super::Client;
|
||||||
|
}
|
||||||
|
|
|
@ -85,3 +85,7 @@ impl Client {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub mod prelude {
|
||||||
|
pub use super::Client;
|
||||||
|
}
|
||||||
|
|
|
@ -59,9 +59,9 @@ mod builder_tagged {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
use nexus_client::{Client, ClientInstancesExt};
|
use nexus_client::prelude::*;
|
||||||
|
|
||||||
fn _ignore() {
|
async fn _ignore() {
|
||||||
let client = Client::new("");
|
let client = Client::new("");
|
||||||
let stream = client
|
let stream = client
|
||||||
.instance_disk_list()
|
.instance_disk_list()
|
||||||
|
@ -71,11 +71,12 @@ mod builder_tagged {
|
||||||
.stream();
|
.stream();
|
||||||
let _ = stream.collect::<Vec<_>>();
|
let _ = stream.collect::<Vec<_>>();
|
||||||
|
|
||||||
// client
|
let _ = client
|
||||||
// .instance_create()
|
.instance_create()
|
||||||
// .organization_name("org")
|
.organization_name("org")
|
||||||
// .project_name("project")
|
.project_name("project")
|
||||||
// .body(types::InstanceCreate::builder())
|
.body(self::nexus_client::types::InstanceCreate::builder())
|
||||||
// .send();
|
.send()
|
||||||
|
.await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue