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 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)
|
||||
|
||||
|
|
|
@ -283,6 +283,10 @@ impl Generator {
|
|||
impl Client {
|
||||
#(#methods)*
|
||||
}
|
||||
|
||||
pub mod prelude {
|
||||
pub use super::Client;
|
||||
}
|
||||
};
|
||||
Ok(out)
|
||||
}
|
||||
|
@ -321,6 +325,10 @@ impl Generator {
|
|||
|
||||
#(#builder_struct)*
|
||||
}
|
||||
|
||||
pub mod prelude {
|
||||
pub use self::super::Client;
|
||||
}
|
||||
};
|
||||
|
||||
Ok(out)
|
||||
|
@ -335,7 +343,8 @@ impl Generator {
|
|||
.map(|method| self.builder_struct(method, TagStyle::Separate))
|
||||
.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! {
|
||||
#traits_and_impls
|
||||
|
@ -352,6 +361,12 @@ impl Generator {
|
|||
};
|
||||
|
||||
#(#builder_struct)*
|
||||
|
||||
}
|
||||
|
||||
pub mod prelude {
|
||||
pub use super::Client;
|
||||
#trait_preludes
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -1571,10 +1571,30 @@ impl Generator {
|
|||
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(
|
||||
&self,
|
||||
methods: &[OperationMethod],
|
||||
) -> TokenStream {
|
||||
) -> (TokenStream, TokenStream) {
|
||||
let mut base = Vec::new();
|
||||
let mut ext = BTreeMap::new();
|
||||
|
||||
|
@ -1616,28 +1636,40 @@ impl Generator {
|
|||
}
|
||||
});
|
||||
|
||||
let ext_impl = ext.into_iter().map(|(tag, trait_methods)| {
|
||||
let tr = format_ident!("Client{}Ext", sanitize(&tag, Case::Pascal));
|
||||
let (trait_methods, trait_impls): (
|
||||
Vec<TokenStream>,
|
||||
Vec<TokenStream>,
|
||||
) = trait_methods.into_iter().unzip();
|
||||
let (ext_impl, ext_use): (Vec<_>, Vec<_>) = ext
|
||||
.into_iter()
|
||||
.map(|(tag, trait_methods)| {
|
||||
let tr =
|
||||
format_ident!("Client{}Ext", sanitize(&tag, Case::Pascal));
|
||||
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! {
|
||||
pub trait #tr {
|
||||
#(#trait_methods)*
|
||||
}
|
||||
#base_impl
|
||||
|
||||
impl #tr for Client {
|
||||
#(#trait_impls)*
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
quote! {
|
||||
#base_impl
|
||||
|
||||
#(#ext_impl)*
|
||||
}
|
||||
#(#ext_impl)*
|
||||
},
|
||||
quote! {
|
||||
#(pub use super::#ext_use;)*
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
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 stream = client
|
||||
.instance_disk_list()
|
||||
|
@ -71,11 +71,12 @@ mod builder_tagged {
|
|||
.stream();
|
||||
let _ = stream.collect::<Vec<_>>();
|
||||
|
||||
// client
|
||||
// .instance_create()
|
||||
// .organization_name("org")
|
||||
// .project_name("project")
|
||||
// .body(types::InstanceCreate::builder())
|
||||
// .send();
|
||||
let _ = client
|
||||
.instance_create()
|
||||
.organization_name("org")
|
||||
.project_name("project")
|
||||
.body(self::nexus_client::types::InstanceCreate::builder())
|
||||
.send()
|
||||
.await;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue