expri 0.1.2

Repo-local remote experiment workflow tools
use serde::{Deserialize, Serialize};

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum SetupStep {
  Uv {
    #[serde(default)]
    extras: Vec<String>,
    #[serde(default)]
    args: Vec<String>,
  },
  Hf {
    repo: String,
    revision: Option<String>,
    #[serde(default)]
    args: Vec<String>,
  },
  Script {
    path: String,
    #[serde(default)]
    args: Vec<String>,
  },
}

#[derive(Debug, Deserialize, Serialize)]
pub struct SetupRequest {
  pub state_dir: String,
  pub force: bool,
  pub steps: Vec<SetupStep>,
}

#[derive(Debug, Deserialize, Serialize)]
pub struct SyncApplyRequest {
  pub head: String,
  pub remote_url: Option<String>,
  pub source_bundle: Option<String>,
  pub source_bundle_sha256: Option<String>,
  pub patch: String,
  pub patch_sha256: String,
  pub state_dir: String,
  pub force: bool,
}

#[derive(Debug, Deserialize, Serialize)]
pub struct PullArtifacts {
  pub head: String,
  pub source_bundle: String,
  pub source_bundle_sha256: String,
  pub patch: String,
  pub patch_sha256: String,
  pub state_dir: String,
}