snarkvm_synthesizer_program/import/
parse.rs1use super::*;
17
18impl<N: Network> Parser for Import<N> {
19 #[inline]
22 fn parse(string: &str) -> ParserResult<Self> {
23 let (string, _) = Sanitizer::parse(string)?;
25 let (string, _) = tag(Self::type_name())(string)?;
27 let (string, _) = Sanitizer::parse_whitespaces(string)?;
29 let (string, id) = ProgramID::parse(string)?;
31 let (string, _) = Sanitizer::parse_whitespaces(string)?;
33 let (string, _) = tag(";")(string)?;
35 Ok((string, Self { program_id: id }))
37 }
38}
39
40impl<N: Network> FromStr for Import<N> {
41 type Err = Error;
42
43 #[inline]
45 fn from_str(string: &str) -> Result<Self> {
46 match Self::parse(string) {
47 Ok((remainder, object)) => {
48 ensure!(remainder.is_empty(), "Failed to parse string. Found invalid character in: \"{remainder}\"");
50 Ok(object)
52 }
53 Err(error) => bail!("Failed to parse string. {error}"),
54 }
55 }
56}
57
58impl<N: Network> Debug for Import<N> {
59 fn fmt(&self, f: &mut Formatter) -> fmt::Result {
61 Display::fmt(self, f)
62 }
63}
64
65impl<N: Network> Display for Import<N> {
66 fn fmt(&self, f: &mut Formatter) -> fmt::Result {
68 write!(f, "{type_} {id};", type_ = Self::type_name(), id = self.program_id)
69 }
70}
71
72#[cfg(test)]
73mod tests {
74 use super::*;
75 use console::network::MainnetV0;
76
77 type CurrentNetwork = MainnetV0;
78
79 #[test]
80 fn test_import_parse() -> Result<()> {
81 let import = Import::<CurrentNetwork>::parse("import bar.aleo;").unwrap().1;
82 assert_eq!(import.name(), &Identifier::<CurrentNetwork>::from_str("bar")?);
83 assert_eq!(import.network(), &Identifier::<CurrentNetwork>::from_str("aleo")?);
84
85 let import = Import::<CurrentNetwork>::parse("import foo.aleo;").unwrap().1;
86 assert_eq!(import.name(), &Identifier::<CurrentNetwork>::from_str("foo")?);
87 assert_eq!(import.network(), &Identifier::<CurrentNetwork>::from_str("aleo")?);
88
89 Ok(())
90 }
91
92 #[test]
93 fn test_import_display() -> Result<()> {
94 let import = Import::<CurrentNetwork>::from_str("import bar.aleo;")?;
95 assert_eq!("import bar.aleo;", import.to_string());
96
97 let import = Import::<CurrentNetwork>::from_str("import foo.aleo;")?;
98 assert_eq!("import foo.aleo;", import.to_string());
99
100 Ok(())
101 }
102}