74 lines
1.7 KiB
Rust
74 lines
1.7 KiB
Rust
use std::str::FromStr;
|
|
|
|
use journal::types::Consumer;
|
|
|
|
use crate::args::Args;
|
|
use crate::display::print_ingestion_log;
|
|
use crate::formatting::format_experience_title;
|
|
use crate::utils::load_journal;
|
|
|
|
#[derive(Debug, Clone, clap::Args)]
|
|
pub struct PrintExperienceArgs {
|
|
#[arg(requires = "journal_file")]
|
|
pub experience_title: String,
|
|
|
|
pub _x: (),
|
|
|
|
#[arg(long)]
|
|
pub substance_filter: Option<Vec<String>>,
|
|
#[arg(long, value_delimiter = ',')]
|
|
pub consumer_filter: Option<Vec<String>>,
|
|
}
|
|
|
|
pub fn parse_consumer_filter(consumer_filter: Option<Vec<String>>) -> Option<Vec<Consumer>> {
|
|
match consumer_filter {
|
|
Some(consumer_filter) => {
|
|
let mut consumers: Vec<Consumer> = Vec::new();
|
|
for consumer in consumer_filter.into_iter() {
|
|
let mut consumer_name = consumer.as_str();
|
|
if consumer_name.is_empty() {
|
|
consumer_name = "default";
|
|
}
|
|
|
|
consumers.push(Consumer::from_str(consumer_name).unwrap());
|
|
}
|
|
Some(consumers)
|
|
}
|
|
None => None,
|
|
}
|
|
}
|
|
|
|
pub fn print_experience(
|
|
global_args: &Args,
|
|
args: &PrintExperienceArgs,
|
|
) -> Result<(), Box<dyn std::error::Error>> {
|
|
let journal = load_journal(
|
|
&global_args
|
|
.journal_file_args
|
|
.psychonaut_export_file
|
|
.clone()
|
|
.unwrap(),
|
|
)
|
|
.expect("could not load export data");
|
|
|
|
let experience = journal
|
|
.first_experience_by_title(&args.experience_title)
|
|
.expect("could not find experience");
|
|
|
|
//println!("{:#?}", &experience);
|
|
|
|
println!("{}", format_experience_title(experience));
|
|
|
|
let substance_filter = args.substance_filter.clone();
|
|
let consumer_filter = parse_consumer_filter(args.consumer_filter.clone());
|
|
|
|
print_ingestion_log(
|
|
&journal,
|
|
experience,
|
|
substance_filter.as_ref(),
|
|
consumer_filter.as_ref(),
|
|
);
|
|
|
|
Ok(())
|
|
}
|