snarkvm_console_program/locator/
parse.rs1use super::*;
17
18impl<N: Network> Parser for Locator<N> {
19 #[inline]
21 fn parse(string: &str) -> ParserResult<Self> {
22 let (string, id) = ProgramID::parse(string)?;
24 let (string, (_, resource)) = pair(tag("/"), Identifier::parse)(string)?;
26 Ok((string, Self { id, resource }))
28 }
29}
30
31impl<N: Network> FromStr for Locator<N> {
32 type Err = Error;
33
34 #[inline]
36 fn from_str(string: &str) -> Result<Self> {
37 match Self::parse(string) {
38 Ok((remainder, object)) => {
39 ensure!(remainder.is_empty(), "Failed to parse string. Found invalid character in: \"{remainder}\"");
41 Ok(object)
43 }
44 Err(error) => bail!("Failed to parse string. {error}"),
45 }
46 }
47}
48
49impl<N: Network> Debug for Locator<N> {
50 fn fmt(&self, f: &mut Formatter) -> fmt::Result {
52 Display::fmt(self, f)
53 }
54}
55
56impl<N: Network> Display for Locator<N> {
57 fn fmt(&self, f: &mut Formatter) -> fmt::Result {
59 write!(f, "{id}/{resource}", id = self.id, resource = self.resource)
60 }
61}
62
63#[cfg(test)]
64mod tests {
65 use super::*;
66 use snarkvm_console_network::MainnetV0;
67
68 type CurrentNetwork = MainnetV0;
69
70 #[test]
71 fn test_import_parse() -> Result<()> {
72 let locator = Locator::<CurrentNetwork>::parse("foo.aleo/compute").unwrap().1;
73 assert_eq!(locator.name(), &Identifier::<CurrentNetwork>::from_str("foo")?);
74 assert_eq!(locator.network(), &Identifier::<CurrentNetwork>::from_str("aleo")?);
75 assert_eq!(locator.resource(), &Identifier::<CurrentNetwork>::from_str("compute")?);
76
77 assert!(Locator::<CurrentNetwork>::parse("foo.aleo").is_err());
78 assert!(Locator::<CurrentNetwork>::parse("foo/compute").is_err());
79
80 Ok(())
81 }
82
83 #[test]
84 fn test_import_display() -> Result<()> {
85 let id = Locator::<CurrentNetwork>::from_str("foo.aleo/compute")?;
86 assert_eq!("foo.aleo/compute", id.to_string());
87
88 assert!(Locator::<CurrentNetwork>::parse("foo.aleo").is_err());
89 assert!(Locator::<CurrentNetwork>::parse("foo/compute").is_err());
90
91 Ok(())
92 }
93}