Skip to main content

provenant/output_schema/
email.rs

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