add derive builder for header
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
db6a185ebb
commit
99f5f8d9b2
7 changed files with 115 additions and 40 deletions
79
Cargo.lock
generated
79
Cargo.lock
generated
|
@ -217,6 +217,72 @@ dependencies = [
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "darling"
|
||||||
|
version = "0.14.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8"
|
||||||
|
dependencies = [
|
||||||
|
"darling_core",
|
||||||
|
"darling_macro",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "darling_core"
|
||||||
|
version = "0.14.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb"
|
||||||
|
dependencies = [
|
||||||
|
"fnv",
|
||||||
|
"ident_case",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"strsim",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "darling_macro"
|
||||||
|
version = "0.14.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685"
|
||||||
|
dependencies = [
|
||||||
|
"darling_core",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "derive_builder"
|
||||||
|
version = "0.12.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8"
|
||||||
|
dependencies = [
|
||||||
|
"derive_builder_macro",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "derive_builder_core"
|
||||||
|
version = "0.12.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f"
|
||||||
|
dependencies = [
|
||||||
|
"darling",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "derive_builder_macro"
|
||||||
|
version = "0.12.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e"
|
||||||
|
dependencies = [
|
||||||
|
"derive_builder_core",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "errno"
|
name = "errno"
|
||||||
version = "0.2.8"
|
version = "0.2.8"
|
||||||
|
@ -238,6 +304,12 @@ dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fnv"
|
||||||
|
version = "1.0.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures"
|
name = "futures"
|
||||||
version = "0.3.25"
|
version = "0.3.25"
|
||||||
|
@ -372,6 +444,12 @@ dependencies = [
|
||||||
"cxx-build",
|
"cxx-build",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ident_case"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "io-lifetimes"
|
name = "io-lifetimes"
|
||||||
version = "1.0.3"
|
version = "1.0.3"
|
||||||
|
@ -443,6 +521,7 @@ dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"chrono",
|
"chrono",
|
||||||
"clap",
|
"clap",
|
||||||
|
"derive_builder",
|
||||||
"futures",
|
"futures",
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
|
|
|
@ -8,6 +8,7 @@ edition = "2021"
|
||||||
anyhow = { version = "1.0.68", features = ["backtrace"] }
|
anyhow = { version = "1.0.68", features = ["backtrace"] }
|
||||||
chrono = "0.4.23"
|
chrono = "0.4.23"
|
||||||
clap = { version = "4.0.32", features = ["derive"] }
|
clap = { version = "4.0.32", features = ["derive"] }
|
||||||
|
derive_builder = "0.12.0"
|
||||||
futures = "0.3.25"
|
futures = "0.3.25"
|
||||||
libc = "0.2.139"
|
libc = "0.2.139"
|
||||||
log = "0.4.17"
|
log = "0.4.17"
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
overlays = [ fenix.overlays.default ];
|
overlays = [ fenix.overlays.default ];
|
||||||
};
|
};
|
||||||
|
|
||||||
toolchain = pkgs.fenix.stable;
|
toolchain = pkgs.fenix.default;
|
||||||
|
|
||||||
flakePkgs = {
|
flakePkgs = {
|
||||||
asciinema = pkgs.callPackage ./. { inherit toolchain; };
|
asciinema = pkgs.callPackage ./. { inherit toolchain; };
|
||||||
|
@ -26,10 +26,11 @@
|
||||||
cargo-watch
|
cargo-watch
|
||||||
cargo-deny
|
cargo-deny
|
||||||
cargo-edit
|
cargo-edit
|
||||||
|
cargo-expand
|
||||||
|
|
||||||
# Get the nightly version of rustfmt so we can wrap comments
|
# Get the nightly version of rustfmt so we can wrap comments
|
||||||
pkgs.fenix.default.rustfmt
|
pkgs.fenix.default.rustfmt
|
||||||
]) ++ (with toolchain; [ cargo rustc rustfmt ]);
|
]) ++ (with toolchain; [ cargo clippy rustc rustfmt ]);
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,22 +6,39 @@ use std::collections::HashMap;
|
||||||
|
|
||||||
use serde::ser::{Serialize, SerializeSeq, Serializer};
|
use serde::ser::{Serialize, SerializeSeq, Serializer};
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Debug, Builder, Serialize)]
|
||||||
pub struct Header {
|
pub struct Header {
|
||||||
pub version: u32,
|
#[builder(setter(skip))]
|
||||||
|
pub version: Version,
|
||||||
pub width: u32,
|
pub width: u32,
|
||||||
pub height: u32,
|
pub height: u32,
|
||||||
|
|
||||||
|
#[builder(setter(strip_option), default)]
|
||||||
pub timestamp: Option<u32>,
|
pub timestamp: Option<u32>,
|
||||||
|
#[builder(setter(strip_option), default)]
|
||||||
pub duration: Option<f64>,
|
pub duration: Option<f64>,
|
||||||
|
#[builder(setter(strip_option), default)]
|
||||||
pub idle_time_limit: Option<f64>,
|
pub idle_time_limit: Option<f64>,
|
||||||
|
#[builder(setter(into, strip_option), default)]
|
||||||
pub command: Option<String>,
|
pub command: Option<String>,
|
||||||
|
#[builder(setter(into, strip_option), default)]
|
||||||
pub title: Option<String>,
|
pub title: Option<String>,
|
||||||
|
#[builder(setter(into, strip_option), default)]
|
||||||
pub env: Option<HashMap<String, String>>,
|
pub env: Option<HashMap<String, String>>,
|
||||||
|
#[builder(setter(strip_option), default)]
|
||||||
pub theme: Option<Theme>,
|
pub theme: Option<Theme>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Debug, Clone, Copy, Serialize)]
|
||||||
|
pub struct Version(u32);
|
||||||
|
|
||||||
|
impl Default for Version {
|
||||||
|
fn default() -> Self {
|
||||||
|
Version(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize)]
|
||||||
pub struct Theme {
|
pub struct Theme {
|
||||||
fg: String,
|
fg: String,
|
||||||
bg: String,
|
bg: String,
|
||||||
|
@ -55,19 +72,3 @@ impl Serialize for Event {
|
||||||
seq.end()
|
seq.end()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_header(width: u32, height: u32) -> Header {
|
|
||||||
Header {
|
|
||||||
version: 2,
|
|
||||||
width,
|
|
||||||
height,
|
|
||||||
|
|
||||||
timestamp: None,
|
|
||||||
duration: None,
|
|
||||||
idle_time_limit: None,
|
|
||||||
command: None,
|
|
||||||
title: None,
|
|
||||||
env: None,
|
|
||||||
theme: None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
//! Setting up a recorder
|
//! Setting up a recorder
|
||||||
|
|
||||||
|
use std::collections::HashMap;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ use std::thread;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|
||||||
use crate::asciicast::Header;
|
use crate::asciicast::HeaderBuilder;
|
||||||
|
|
||||||
use super::terminal::Terminal;
|
use super::terminal::Terminal;
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ pub fn record(opts: RecordOpts) -> Result<()> {
|
||||||
// Write header
|
// Write header
|
||||||
// TODO: Clean this up
|
// TODO: Clean this up
|
||||||
let header = {
|
let header = {
|
||||||
let command_str = format!("{:?}", command);
|
let command_str = format!("{command:?}");
|
||||||
let env = command
|
let env = command
|
||||||
.get_envs()
|
.get_envs()
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
@ -40,20 +40,14 @@ pub fn record(opts: RecordOpts) -> Result<()> {
|
||||||
b.to_string_lossy().to_string(),
|
b.to_string_lossy().to_string(),
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
.collect();
|
.collect::<HashMap<_, _>>();
|
||||||
Header {
|
|
||||||
version: 2,
|
|
||||||
width: 30,
|
|
||||||
height: 30,
|
|
||||||
|
|
||||||
timestamp: None,
|
HeaderBuilder::default()
|
||||||
duration: None,
|
.width(30)
|
||||||
idle_time_limit: None,
|
.height(30)
|
||||||
command: Some(command_str),
|
.command(command_str)
|
||||||
title: None,
|
.env(env)
|
||||||
env: Some(env),
|
.build()?
|
||||||
theme: None,
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
serde_json::to_writer(&file, &header)?;
|
serde_json::to_writer(&file, &header)?;
|
||||||
|
|
|
@ -3,6 +3,8 @@ extern crate anyhow;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate clap;
|
extern crate clap;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
|
extern crate derive_builder;
|
||||||
|
#[macro_use]
|
||||||
extern crate serde_derive;
|
extern crate serde_derive;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate tracing;
|
extern crate tracing;
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
#[macro_use]
|
|
||||||
extern crate tracing;
|
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use clap::{ArgAction, Parser};
|
use clap::{ArgAction, Parser};
|
||||||
use liveterm::client::recorder::{record, RecordOpts};
|
use liveterm::client::recorder::{record, RecordOpts};
|
||||||
|
|
Loading…
Reference in a new issue