Skip to content

Commit

Permalink
fix: extract common arguments and fix clap arg clash
Browse files Browse the repository at this point in the history
  • Loading branch information
ctron committed Jan 19, 2024
1 parent baa66de commit dcb94ec
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 103 deletions.
50 changes: 0 additions & 50 deletions csaf/csaf-cli/src/cmd/mod.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
use anyhow::Context;
use csaf_walker::visitors::{filter::FilterConfig, store::StoreVisitor};
use flexible_time::timestamp::StartTimestamp;
use reqwest::Url;
use std::collections::HashSet;
use std::path::PathBuf;
use walker_common::sender::{self, provider::OpenIdTokenProviderConfigArguments, HttpSender};
use walker_extras::visitors::SendVisitor;

pub mod discover;
pub mod download;
Expand Down Expand Up @@ -87,53 +84,6 @@ impl TryFrom<StoreArguments> for StoreVisitor {
}
}

#[derive(Debug, clap::Parser)]
#[command(next_help_heading = "Sending")]
pub struct SendArguments {
/// Target to send to
pub target: Url,

/// Sender connect timeout
#[arg(id = "sender-connect-timeout", long, default_value = "15s")]
pub connect_timeout: humantime::Duration,

/// Sender request timeout
#[arg(id = "sender-timeout", long, default_value = "5m")]
pub timeout: humantime::Duration,

/// Number of retries in case of temporary failures
#[arg(id = "retries", long, default_value = "0")]
pub retries: usize,

/// Delay between retries
#[arg(id = "retry-delay", long, default_value = "5s")]
pub retry_delay: humantime::Duration,

#[command(flatten)]
pub oidc: OpenIdTokenProviderConfigArguments,
}

impl SendArguments {
pub async fn into_visitor(self) -> Result<SendVisitor, anyhow::Error> {
let provider = self.oidc.into_provider().await?;
let sender = HttpSender::new(
provider,
sender::Options {
connect_timeout: Some(self.connect_timeout.into()),
timeout: Some(self.timeout.into()),
},
)
.await?;

Ok(SendVisitor {
url: self.target,
sender,
retries: self.retries,
retry_delay: Some(self.retry_delay.into()),
})
}
}

#[derive(Debug, clap::Parser)]
#[command(next_help_heading = "Skipping")]
pub struct SkipArguments {
Expand Down
4 changes: 2 additions & 2 deletions csaf/csaf-cli/src/cmd/send.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::{
cmd::{DiscoverArguments, FilterArguments, SendArguments, SkipArguments},
cmd::{DiscoverArguments, FilterArguments, SkipArguments},
common::{walk_visitor, DiscoverConfig},
};
use csaf_walker::{
Expand All @@ -11,7 +11,7 @@ use walker_common::{
since::Since,
validate::ValidationOptions,
};
use walker_extras::visitors::SendVisitor;
use walker_extras::visitors::{SendArguments, SendVisitor};

/// Walk a source and send validated/retrieved documents to a sink.
#[derive(clap::Args, Debug)]
Expand Down
5 changes: 5 additions & 0 deletions extras/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,18 @@ thiserror = "1"
tokio = { version = "1", features = ["time"] }
reqwest = "0.11"

clap = { version = "4", features = ["derive"], optional = true }

walker-common = { version = "0.6.0-alpha.2", path = "../common" }

csaf-walker = { version = "0.6.0-alpha.2", path = "../csaf", optional = true }
sbom-walker = { version = "0.6.0-alpha.2", path = "../sbom", optional = true }
humantime = "2.1.0"
anyhow = "1.0.71"

[features]
default = [
"clap",
"csaf-walker",
"sbom-walker"
]
Expand Down
50 changes: 50 additions & 0 deletions extras/src/visitors/send/clap.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
use crate::visitors::SendVisitor;
use reqwest::Url;
use walker_common::sender::{self, provider::OpenIdTokenProviderConfigArguments, HttpSender};

#[derive(Debug, clap::Parser)]
#[command(next_help_heading = "Sending")]
pub struct SendArguments {
/// Target to send to
pub target: Url,

/// Sender connect timeout
#[arg(id = "sender-connect-timeout", long, default_value = "15s")]
pub connect_timeout: humantime::Duration,

/// Sender request timeout
#[arg(id = "sender-timeout", long, default_value = "5m")]
pub timeout: humantime::Duration,

/// Number of retries in case of temporary failures
#[arg(id = "sender-retries", long, default_value = "0")]
pub retries: usize,

/// Delay between retries
#[arg(id = "sender-retry-delay", long, default_value = "5s")]
pub retry_delay: humantime::Duration,

#[command(flatten)]
pub oidc: OpenIdTokenProviderConfigArguments,
}

impl SendArguments {
pub async fn into_visitor(self) -> Result<SendVisitor, anyhow::Error> {
let provider = self.oidc.into_provider().await?;
let sender = HttpSender::new(
provider,
sender::Options {
connect_timeout: Some(self.connect_timeout.into()),
timeout: Some(self.timeout.into()),
},
)
.await?;

Ok(SendVisitor {
url: self.target,
sender,
retries: self.retries,
retry_delay: Some(self.retry_delay.into()),
})
}
}
5 changes: 5 additions & 0 deletions extras/src/visitors/send/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ mod csaf;
#[cfg(feature = "csaf-walker")]
pub use csaf::*;

#[cfg(feature = "clap")]
mod clap;
#[cfg(feature = "clap")]
pub use clap::*;

#[derive(Debug, thiserror::Error)]
pub enum SendError {
#[error(transparent)]
Expand Down
49 changes: 0 additions & 49 deletions sbom/sbom-cli/src/cmd/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ use flexible_time::timestamp::StartTimestamp;
use reqwest::Url;
use sbom_walker::visitors::store::StoreVisitor;
use std::path::PathBuf;
use walker_common::sender::{self, provider::OpenIdTokenProviderConfigArguments, HttpSender};
use walker_extras::visitors::SendVisitor;

pub mod discover;
pub mod download;
Expand Down Expand Up @@ -54,53 +52,6 @@ impl TryFrom<StoreArguments> for StoreVisitor {
}
}

#[derive(Debug, clap::Parser)]
#[command(next_help_heading = "Sending")]
pub struct SendArguments {
/// Target to send to
pub target: Url,

/// Sender connect timeout
#[arg(id = "sender-connect-timeout", long, default_value = "15s")]
pub connect_timeout: humantime::Duration,

/// Sender request timeout
#[arg(id = "sender-timeout", long, default_value = "5m")]
pub timeout: humantime::Duration,

/// Number of retries in case of temporary failures
#[arg(id = "retries", long, default_value = "0")]
pub retries: usize,

/// Delay between retries
#[arg(id = "retry-delay", long, default_value = "5s")]
pub retry_delay: humantime::Duration,

#[command(flatten)]
pub oidc: OpenIdTokenProviderConfigArguments,
}

impl SendArguments {
pub async fn into_visitor(self) -> Result<SendVisitor, anyhow::Error> {
let provider = self.oidc.into_provider().await?;
let sender = HttpSender::new(
provider,
sender::Options {
connect_timeout: Some(self.connect_timeout.into()),
timeout: Some(self.timeout.into()),
},
)
.await?;

Ok(SendVisitor {
url: self.target,
sender,
retries: self.retries,
retry_delay: Some(self.retry_delay.into()),
})
}
}

#[derive(Debug, clap::Parser)]
#[command(next_help_heading = "Skipping")]
pub struct SkipArguments {
Expand Down
4 changes: 2 additions & 2 deletions sbom/sbom-cli/src/cmd/send.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::{
cmd::{DiscoverArguments, SendArguments, SkipArguments},
cmd::{DiscoverArguments, SkipArguments},
common::{walk_visitor, DiscoverConfig},
};
use sbom_walker::{
Expand All @@ -11,7 +11,7 @@ use walker_common::{
since::Since,
validate::ValidationOptions,
};
use walker_extras::visitors::SendVisitor;
use walker_extras::visitors::{SendArguments, SendVisitor};

/// Walk a source and send validated/retrieved documents to a sink.
#[derive(clap::Args, Debug)]
Expand Down

0 comments on commit dcb94ec

Please sign in to comment.