nils-memo-cli 0.5.3

CLI crate for nils-memo-cli in the nils-cli workspace.
Documentation
use serde_json::json;

use crate::cli::{DeleteArgs, OutputMode};
use crate::errors::AppError;
use crate::output::{emit_json_result, format_item_id, parse_item_id, text};
use crate::storage::Storage;
use crate::storage::repository;

pub fn run(storage: &Storage, args: &DeleteArgs, output_mode: OutputMode) -> Result<(), AppError> {
    if !args.hard {
        return Err(AppError::usage(
            "delete requires --hard because only hard delete is supported",
        ));
    }

    let item_id = parse_item_id(&args.item_id)
        .ok_or_else(|| AppError::usage("delete requires a valid item_id"))?;

    let deleted = storage.with_transaction(|tx| repository::delete_item_hard(tx, item_id))?;

    if output_mode.is_json() {
        return emit_json_result(
            "memo-cli.delete.v1",
            "memo-cli delete",
            json!({
                "item_id": format_item_id(deleted.item_id),
                "deleted": true,
                "deleted_at": deleted.deleted_at,
                "removed_derivations": deleted.removed_derivations,
                "removed_workflow_anchors": deleted.removed_workflow_anchors,
            }),
        );
    }

    text::print_delete(
        deleted.item_id,
        &deleted.deleted_at,
        deleted.removed_derivations,
        deleted.removed_workflow_anchors,
    );
    Ok(())
}