email-cli 0.1.1

Agent-friendly email CLI for Resend
use anyhow::Result;

use crate::app::App;
use crate::cli::*;
use crate::models::*;
use crate::output::print_success_or;

impl App {
    pub fn audience_list(&self) -> Result<()> {
        let client = self.default_client()?;
        let audiences = client.list_audiences()?;
        print_success_or(self.format, &audiences, |a| {
            for audience in &a.data {
                println!("{} {}", audience.id, audience.name);
            }
        });
        Ok(())
    }

    pub fn audience_get(&self, args: AudienceGetArgs) -> Result<()> {
        let client = self.default_client()?;
        let audience = client.get_audience(&args.id)?;
        print_success_or(self.format, &audience, |a| {
            println!("id: {}", a.id);
            println!("name: {}", a.name);
            if let Some(created) = &a.created_at {
                println!("created: {}", created);
            }
        });
        Ok(())
    }

    pub fn audience_create(&self, args: AudienceCreateArgs) -> Result<()> {
        let client = self.default_client()?;
        let response = client.create_audience(&CreateAudienceRequest { name: args.name })?;
        print_success_or(self.format, &response, |r| {
            println!("created audience {} (id: {})", r.name, r.id);
        });
        Ok(())
    }

    pub fn audience_delete(&self, args: AudienceDeleteArgs) -> Result<()> {
        let client = self.default_client()?;
        let response = client.delete_audience(&args.id)?;
        print_success_or(self.format, &response, |r| {
            println!("deleted: {}", r.deleted);
        });
        Ok(())
    }
}