Skip to main content

provenant/output_schema/
holder.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Serialize, Deserialize, Debug, Clone)]
4pub struct OutputHolder {
5    pub holder: String,
6    pub start_line: u64,
7    pub end_line: u64,
8}
9
10impl From<&crate::models::Holder> for OutputHolder {
11    fn from(value: &crate::models::Holder) -> Self {
12        Self {
13            holder: value.holder.clone(),
14            start_line: value.start_line.get() as u64,
15            end_line: value.end_line.get() as u64,
16        }
17    }
18}
19
20impl TryFrom<&OutputHolder> for crate::models::Holder {
21    type Error = String;
22    fn try_from(value: &OutputHolder) -> Result<Self, Self::Error> {
23        use crate::models::LineNumber;
24        let start_line = LineNumber::new(value.start_line as usize)
25            .ok_or_else(|| format!("invalid start_line: {}", value.start_line))?;
26        let end_line = LineNumber::new(value.end_line as usize)
27            .ok_or_else(|| format!("invalid end_line: {}", value.end_line))?;
28        Ok(Self {
29            holder: value.holder.clone(),
30            start_line,
31            end_line,
32        })
33    }
34}