virtuoso-cli 0.1.3

CLI tool to control Cadence Virtuoso from anywhere, locally or remotely
Documentation
use crate::client::bridge::VirtuosoClient;
use crate::error::Result;
use serde_json::{json, Value};

pub fn open(lib: &str, cell: &str, view: &str, mode: &str, dry_run: bool) -> Result<Value> {
    if dry_run {
        return Ok(json!({
            "action": "open",
            "resource": "cell",
            "target": {
                "lib": lib,
                "cell": cell,
                "view": view,
                "mode": mode,
            },
            "dry_run": true,
        }));
    }

    let client = VirtuosoClient::from_env()?;
    let result = client.open_cell_view(lib, cell, view, mode)?;

    Ok(json!({
        "status": if result.ok() { "success" } else { "error" },
        "lib": lib,
        "cell": cell,
        "view": view,
        "output": result.output,
        "errors": result.errors,
    }))
}

pub fn save() -> Result<Value> {
    let client = VirtuosoClient::from_env()?;
    let result = client.save_current_cellview()?;

    Ok(json!({
        "status": if result.ok() { "success" } else { "error" },
        "output": result.output,
    }))
}

pub fn close() -> Result<Value> {
    let client = VirtuosoClient::from_env()?;
    let result = client.close_current_cellview()?;

    Ok(json!({
        "status": if result.ok() { "success" } else { "error" },
        "output": result.output,
    }))
}

pub fn info() -> Result<Value> {
    let client = VirtuosoClient::from_env()?;
    let (lib, cell, view) = client.get_current_design()?;

    Ok(json!({
        "lib": lib,
        "cell": cell,
        "view": view,
    }))
}