use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Evidence {
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub pointer: Option<Pointer>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Pointer {
pub source: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub line: Option<u32>,
}
impl Evidence {
pub fn new(message: impl Into<String>) -> Self {
Self {
message: message.into(),
pointer: None,
}
}
pub fn with(message: impl Into<String>, source: impl Into<String>) -> Self {
Self {
message: message.into(),
pointer: Some(Pointer {
source: source.into(),
line: None,
}),
}
}
pub fn at_line(message: impl Into<String>, source: impl Into<String>, line: u32) -> Self {
Self {
message: message.into(),
pointer: Some(Pointer {
source: source.into(),
line: Some(line),
}),
}
}
}