mirror of
https://github.com/asciinema/asciinema.git
synced 2025-12-23 23:20:16 +01:00
55 lines
1.3 KiB
Rust
55 lines
1.3 KiB
Rust
|
|
mod asciicast;
|
||
|
|
mod raw;
|
||
|
|
mod txt;
|
||
|
|
|
||
|
|
pub use asciicast::AsciicastEncoder;
|
||
|
|
pub use asciicast::Metadata;
|
||
|
|
pub use raw::RawEncoder;
|
||
|
|
pub use txt::TxtEncoder;
|
||
|
|
|
||
|
|
use crate::asciicast::Event;
|
||
|
|
use crate::recorder;
|
||
|
|
use crate::tty;
|
||
|
|
use std::io;
|
||
|
|
use std::time::{SystemTime, UNIX_EPOCH};
|
||
|
|
|
||
|
|
pub trait Encoder {
|
||
|
|
fn start(&mut self, timestamp: Option<u64>, tty_size: &tty::TtySize) -> io::Result<()>;
|
||
|
|
fn event(&mut self, event: &Event) -> io::Result<()>;
|
||
|
|
|
||
|
|
fn finish(&mut self) -> io::Result<()> {
|
||
|
|
Ok(())
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
impl<E: Encoder> recorder::Output for E {
|
||
|
|
fn start(&mut self, tty_size: &tty::TtySize) -> io::Result<()> {
|
||
|
|
let timestamp = SystemTime::now()
|
||
|
|
.duration_since(UNIX_EPOCH)
|
||
|
|
.unwrap()
|
||
|
|
.as_secs();
|
||
|
|
|
||
|
|
self.start(Some(timestamp), tty_size)
|
||
|
|
}
|
||
|
|
|
||
|
|
fn output(&mut self, time: u64, data: &[u8]) -> io::Result<()> {
|
||
|
|
self.event(&Event::output(time, data))
|
||
|
|
}
|
||
|
|
|
||
|
|
fn input(&mut self, time: u64, data: &[u8]) -> io::Result<()> {
|
||
|
|
self.event(&Event::input(time, data))
|
||
|
|
}
|
||
|
|
|
||
|
|
fn resize(&mut self, time: u64, size: (u16, u16)) -> io::Result<()> {
|
||
|
|
self.event(&Event::resize(time, size))
|
||
|
|
}
|
||
|
|
|
||
|
|
fn marker(&mut self, time: u64) -> io::Result<()> {
|
||
|
|
self.event(&Event::marker(time, "".to_owned()))
|
||
|
|
}
|
||
|
|
|
||
|
|
fn finish(&mut self) -> io::Result<()> {
|
||
|
|
self.finish()
|
||
|
|
}
|
||
|
|
}
|