mirror of
https://github.com/kjuulh/dagger-rs.git
synced 2025-04-19 03:59:51 +02:00
Compare commits
2 Commits
main
...
dagger-sdk
Author | SHA1 | Date | |
---|---|---|---|
37b8b1212b | |||
2c04387c3d |
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -309,7 +309,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dagger-sdk"
|
name = "dagger-sdk"
|
||||||
version = "0.2.17"
|
version = "0.2.18"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
"dagger-core",
|
"dagger-core",
|
||||||
|
@ -8,6 +8,6 @@ edition = "2021"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "4.1.6"
|
clap = "4.1.6"
|
||||||
color-eyre = "0.6.2"
|
color-eyre = "0.6.2"
|
||||||
dagger-sdk = { path = "../crates/dagger-sdk/", version = "^0.2.17" }
|
dagger-sdk = { path = "../crates/dagger-sdk/", version = "^0.2.18" }
|
||||||
eyre = "0.6.8"
|
eyre = "0.6.8"
|
||||||
tokio = { version = "1.25.0", features = ["full"] }
|
tokio = { version = "1.25.0", features = ["full"] }
|
||||||
|
@ -196,6 +196,22 @@ pub fn type_ref_is_scalar(type_ref: &TypeRef) -> bool {
|
|||||||
.unwrap_or(false)
|
.unwrap_or(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn type_ref_is_enum(type_ref: &TypeRef) -> bool {
|
||||||
|
let mut type_ref = type_ref.clone();
|
||||||
|
if type_ref
|
||||||
|
.kind
|
||||||
|
.pipe(|k| *k == __TypeKind::NON_NULL)
|
||||||
|
.unwrap_or(false)
|
||||||
|
{
|
||||||
|
type_ref = *type_ref.of_type.unwrap().clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
type_ref
|
||||||
|
.kind
|
||||||
|
.pipe(|k| *k == __TypeKind::ENUM)
|
||||||
|
.unwrap_or(false)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn type_ref_is_object(type_ref: &TypeRef) -> bool {
|
pub fn type_ref_is_object(type_ref: &TypeRef) -> bool {
|
||||||
let mut type_ref = type_ref.clone();
|
let mut type_ref = type_ref.clone();
|
||||||
if type_ref
|
if type_ref
|
||||||
|
@ -5,8 +5,8 @@ use genco::quote;
|
|||||||
use genco::tokens::quoted;
|
use genco::tokens::quoted;
|
||||||
|
|
||||||
use crate::functions::{
|
use crate::functions::{
|
||||||
type_field_has_optional, type_ref_is_list, type_ref_is_list_of_objects, type_ref_is_object,
|
type_field_has_optional, type_ref_is_enum, type_ref_is_list, type_ref_is_list_of_objects,
|
||||||
type_ref_is_optional, type_ref_is_scalar, CommonFunctions, Scalar,
|
type_ref_is_object, type_ref_is_optional, type_ref_is_scalar, CommonFunctions, Scalar,
|
||||||
};
|
};
|
||||||
use crate::utility::OptionExt;
|
use crate::utility::OptionExt;
|
||||||
|
|
||||||
@ -133,6 +133,12 @@ fn render_required_args(_funcs: &CommonFunctions, field: &FullTypeFields) -> Opt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if type_ref_is_enum(&s.input_value.type_) {
|
||||||
|
return Some(quote! {
|
||||||
|
query = query.arg_enum($(quoted(name)), $(n));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
if type_ref_is_list(&s.input_value.type_) {
|
if type_ref_is_list(&s.input_value.type_) {
|
||||||
let inner = *s
|
let inner = *s
|
||||||
.input_value
|
.input_value
|
||||||
@ -187,6 +193,14 @@ fn render_optional_args(_funcs: &CommonFunctions, field: &FullTypeFields) -> Opt
|
|||||||
let n = format_struct_name(&s.input_value.name);
|
let n = format_struct_name(&s.input_value.name);
|
||||||
let name = &s.input_value.name;
|
let name = &s.input_value.name;
|
||||||
|
|
||||||
|
if type_ref_is_enum(&s.input_value.type_) {
|
||||||
|
return Some(quote! {
|
||||||
|
if let Some($(&n)) = opts.$(&n) {
|
||||||
|
query = query.arg_enum($(quoted(name)), $(n));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
if let Some($(&n)) = opts.$(&n) {
|
if let Some($(&n)) = opts.$(&n) {
|
||||||
query = query.arg($(quoted(name)), $(&n));
|
query = query.arg($(quoted(name)), $(&n));
|
||||||
|
@ -6,8 +6,37 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|||||||
and this project adheres to
|
and this project adheres to
|
||||||
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## v0.2.18 (2023-03-14)
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
- <csr-id-2c04387c3dd4cfd097a8f142570c58bc756c8ab7/> fix serialization of enum args for graphql
|
||||||
|
|
||||||
|
### Commit Statistics
|
||||||
|
|
||||||
|
<csr-read-only-do-not-edit/>
|
||||||
|
|
||||||
|
- 1 commit contributed to the release.
|
||||||
|
- 1 commit was understood as [conventional](https://www.conventionalcommits.org).
|
||||||
|
- 0 issues like '(#ID)' were seen in commit messages
|
||||||
|
|
||||||
|
### Commit Details
|
||||||
|
|
||||||
|
<csr-read-only-do-not-edit/>
|
||||||
|
|
||||||
|
<details><summary>view details</summary>
|
||||||
|
|
||||||
|
* **Uncategorized**
|
||||||
|
- fix serialization of enum args for graphql ([`2c04387`](https://github.com/kjuulh/dagger-rs/commit/2c04387c3dd4cfd097a8f142570c58bc756c8ab7))
|
||||||
|
</details>
|
||||||
|
|
||||||
## v0.2.17 (2023-03-13)
|
## v0.2.17 (2023-03-13)
|
||||||
|
|
||||||
|
<csr-id-f67928155f02076cbb41abd4010523879ff3caf1/>
|
||||||
|
<csr-id-2cc0231c5f29993081f0f7e15e44cac95a7d6086/>
|
||||||
|
<csr-id-9ba01396cb44ee02cf7a16008e3f0bdae9f78754/>
|
||||||
|
<csr-id-e9e35edb1cb67eee8cc033212aba3b1888def78f/>
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
- <csr-id-1bfd084cd28e2b984c61de7f3f9a065cc41be007/> make sure tests have a command to execute
|
- <csr-id-1bfd084cd28e2b984c61de7f3f9a065cc41be007/> make sure tests have a command to execute
|
||||||
@ -30,7 +59,7 @@ and this project adheres to
|
|||||||
|
|
||||||
<csr-read-only-do-not-edit/>
|
<csr-read-only-do-not-edit/>
|
||||||
|
|
||||||
- 9 commits contributed to the release over the course of 2 calendar days.
|
- 10 commits contributed to the release over the course of 2 calendar days.
|
||||||
- 2 days passed between releases.
|
- 2 days passed between releases.
|
||||||
- 9 commits were understood as [conventional](https://www.conventionalcommits.org).
|
- 9 commits were understood as [conventional](https://www.conventionalcommits.org).
|
||||||
- 0 issues like '(#ID)' were seen in commit messages
|
- 0 issues like '(#ID)' were seen in commit messages
|
||||||
@ -42,6 +71,7 @@ and this project adheres to
|
|||||||
<details><summary>view details</summary>
|
<details><summary>view details</summary>
|
||||||
|
|
||||||
* **Uncategorized**
|
* **Uncategorized**
|
||||||
|
- Release dagger-sdk v0.2.17 ([`a8e6dde`](https://github.com/kjuulh/dagger-rs/commit/a8e6dde615029d9a94d159ed84b5373121cd201f))
|
||||||
- make sure tests have a command to execute ([`1bfd084`](https://github.com/kjuulh/dagger-rs/commit/1bfd084cd28e2b984c61de7f3f9a065cc41be007))
|
- make sure tests have a command to execute ([`1bfd084`](https://github.com/kjuulh/dagger-rs/commit/1bfd084cd28e2b984c61de7f3f9a065cc41be007))
|
||||||
- remove unused imports ([`5593fce`](https://github.com/kjuulh/dagger-rs/commit/5593fce2e16e0aa97a2e6843f15d3bb1121048f5))
|
- remove unused imports ([`5593fce`](https://github.com/kjuulh/dagger-rs/commit/5593fce2e16e0aa97a2e6843f15d3bb1121048f5))
|
||||||
- remove export and instead use exitcode ([`2cc0231`](https://github.com/kjuulh/dagger-rs/commit/2cc0231c5f29993081f0f7e15e44cac95a7d6086))
|
- remove export and instead use exitcode ([`2cc0231`](https://github.com/kjuulh/dagger-rs/commit/2cc0231c5f29993081f0f7e15e44cac95a7d6086))
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "dagger-sdk"
|
name = "dagger-sdk"
|
||||||
version = "0.2.17"
|
version = "0.2.18"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
license-file = "LICENSE.MIT"
|
license-file = "LICENSE.MIT"
|
||||||
@ -18,7 +18,7 @@ eyre = "0.6.8"
|
|||||||
futures = "0.3.27"
|
futures = "0.3.27"
|
||||||
gql_client = "1.0.7"
|
gql_client = "1.0.7"
|
||||||
serde = { version = "1.0.152", features = ["derive"] }
|
serde = { version = "1.0.152", features = ["derive"] }
|
||||||
serde_json = "1.0.93"
|
serde_json = { version = "1.0.93", features = ["raw_value"] }
|
||||||
tokio = { version = "1.25.0", features = ["full"] }
|
tokio = { version = "1.25.0", features = ["full"] }
|
||||||
derive_builder = "0.12.0"
|
derive_builder = "0.12.0"
|
||||||
|
|
||||||
|
@ -955,7 +955,7 @@ impl Container {
|
|||||||
|
|
||||||
query = query.arg("port", port);
|
query = query.arg("port", port);
|
||||||
if let Some(protocol) = opts.protocol {
|
if let Some(protocol) = opts.protocol {
|
||||||
query = query.arg("protocol", protocol);
|
query = query.arg_enum("protocol", protocol);
|
||||||
}
|
}
|
||||||
if let Some(description) = opts.description {
|
if let Some(description) = opts.description {
|
||||||
query = query.arg("description", description);
|
query = query.arg("description", description);
|
||||||
@ -1085,7 +1085,7 @@ impl Container {
|
|||||||
query = query.arg("source", source);
|
query = query.arg("source", source);
|
||||||
}
|
}
|
||||||
if let Some(sharing) = opts.sharing {
|
if let Some(sharing) = opts.sharing {
|
||||||
query = query.arg("sharing", sharing);
|
query = query.arg_enum("sharing", sharing);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Container {
|
return Container {
|
||||||
@ -1395,7 +1395,7 @@ impl Container {
|
|||||||
|
|
||||||
query = query.arg("port", port);
|
query = query.arg("port", port);
|
||||||
if let Some(protocol) = opts.protocol {
|
if let Some(protocol) = opts.protocol {
|
||||||
query = query.arg("protocol", protocol);
|
query = query.arg_enum("protocol", protocol);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Container {
|
return Container {
|
||||||
@ -2848,9 +2848,9 @@ impl Socket {
|
|||||||
}
|
}
|
||||||
#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
|
#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
|
||||||
pub enum CacheSharingMode {
|
pub enum CacheSharingMode {
|
||||||
|
LOCKED,
|
||||||
SHARED,
|
SHARED,
|
||||||
PRIVATE,
|
PRIVATE,
|
||||||
LOCKED,
|
|
||||||
}
|
}
|
||||||
#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
|
#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
|
||||||
pub enum NetworkProtocol {
|
pub enum NetworkProtocol {
|
||||||
|
@ -68,6 +68,32 @@ impl Selection {
|
|||||||
s
|
s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn arg_enum<S>(&self, name: &str, value: S) -> Selection
|
||||||
|
where
|
||||||
|
S: Serialize,
|
||||||
|
{
|
||||||
|
let mut s = self.clone();
|
||||||
|
|
||||||
|
let val = serde_json::to_string(&value).unwrap();
|
||||||
|
let val = val[1..val.len() - 1].to_string();
|
||||||
|
|
||||||
|
println!("test");
|
||||||
|
println!("{}", val);
|
||||||
|
|
||||||
|
match s.args.as_mut() {
|
||||||
|
Some(args) => {
|
||||||
|
let _ = args.insert(name.to_string(), val);
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
let mut hm = HashMap::new();
|
||||||
|
let _ = hm.insert(name.to_string(), val);
|
||||||
|
s.args = Some(hm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s
|
||||||
|
}
|
||||||
|
|
||||||
pub fn build(&self) -> eyre::Result<String> {
|
pub fn build(&self) -> eyre::Result<String> {
|
||||||
let mut fields = vec!["query".to_string()];
|
let mut fields = vec!["query".to_string()];
|
||||||
|
|
||||||
@ -76,7 +102,7 @@ impl Selection {
|
|||||||
if let Some(args) = sel.args {
|
if let Some(args) = sel.args {
|
||||||
let actualargs = args
|
let actualargs = args
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(name, arg)| format!("{name}:{arg}"))
|
.map(|(name, arg)| format!("{name}:{}", arg.as_str()))
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
query = query.add(&format!("({})", actualargs.join(", ")));
|
query = query.add(&format!("({})", actualargs.join(", ")));
|
||||||
@ -99,6 +125,9 @@ impl Selection {
|
|||||||
{
|
{
|
||||||
let query = self.build()?;
|
let query = self.build()?;
|
||||||
|
|
||||||
|
let qbs = query.as_str();
|
||||||
|
println!("{}", qbs);
|
||||||
|
|
||||||
let resp: Option<serde_json::Value> = match gql_client.query(&query).await {
|
let resp: Option<serde_json::Value> = match gql_client.query(&query).await {
|
||||||
Ok(r) => r,
|
Ok(r) => r,
|
||||||
Err(e) => eyre::bail!(e),
|
Err(e) => eyre::bail!(e),
|
||||||
|
29
crates/dagger-sdk/tests/issues/iss_33.rs
Normal file
29
crates/dagger-sdk/tests/issues/iss_33.rs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
use dagger_sdk::{ContainerWithExposedPortOpts, NetworkProtocol};
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_issue_30_alt() -> eyre::Result<()> {
|
||||||
|
let client = dagger_sdk::connect().await?;
|
||||||
|
|
||||||
|
client
|
||||||
|
.container()
|
||||||
|
.from("denoland/deno:debian-1.30.3")
|
||||||
|
.with_exposed_port_opts(
|
||||||
|
53,
|
||||||
|
ContainerWithExposedPortOpts {
|
||||||
|
protocol: Some(NetworkProtocol::TCP),
|
||||||
|
description: None,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.with_exposed_port_opts(
|
||||||
|
53,
|
||||||
|
ContainerWithExposedPortOpts {
|
||||||
|
protocol: Some(NetworkProtocol::UDP),
|
||||||
|
description: None,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.with_exec(vec!["echo", "hello"])
|
||||||
|
.exit_code()
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
@ -1 +1,2 @@
|
|||||||
mod iss_30;
|
mod iss_30;
|
||||||
|
mod iss_33;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user