use std::fmt::{self, Display};
pub struct Subject {
pub id: String,
}
impl Subject {
pub fn new(id: String) -> Self {
Subject { id }
}
}
impl Display for Subject {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "Subject {{ id: {} }}", self.id)
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum Stream {
StdOut,
StdErr,
}
impl Display for Stream {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Stream::StdOut => write!(f, "stdout"),
Stream::StdErr => write!(f, "stderr"),
}
}
}
#[derive(Clone, Debug)]
pub struct LogEntry {
pub stream: Stream,
pub message: String,
}
#[derive(Clone, Debug)]
pub struct ExecResult {
pub exit_code: i32,
pub stdout: String,
pub stderr: String,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum SubjectStatus {
Running,
Pending,
Terminated,
}
pub struct HostedSubject {
pub id: String,
pub addr: Option<String>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_subject_new() {
let subject = Subject::new("docker/abc123".to_string());
assert_eq!(subject.id, "docker/abc123");
}
#[test]
fn test_subject_display() {
let subject = Subject::new("docker/abc123".to_string());
assert_eq!(format!("{subject}"), "Subject { id: docker/abc123 }");
}
}