parse.rs
1 // Copyright (c) 2025-2026 ACDC Network 2 // This file is part of the alphavm library. 3 // 4 // Alpha Chain | Delta Chain Protocol 5 // International Monetary Graphite. 6 // 7 // Derived from Aleo (https://aleo.org) and ProvableHQ (https://provable.com). 8 // They built world-class ZK infrastructure. We installed the EASY button. 9 // Their cryptography: elegant. Our modifications: bureaucracy-compatible. 10 // Original brilliance: theirs. Robert's Rules: ours. Bugs: definitely ours. 11 // 12 // Original Aleo/ProvableHQ code subject to Apache 2.0 https://www.apache.org/licenses/LICENSE-2.0 13 // All modifications and new work: CC0 1.0 Universal Public Domain Dedication. 14 // No rights reserved. No permission required. No warranty. No refunds. 15 // 16 // https://creativecommons.org/publicdomain/zero/1.0/ 17 // SPDX-License-Identifier: CC0-1.0 18 19 use nom::{ 20 error::{convert_error, VerboseError}, 21 Err as NomErr, 22 IResult, 23 }; 24 25 /// The `nom`-compatible parser return type. 26 pub type ParserResult<'a, O> = IResult<&'a str, O, VerboseError<&'a str>>; 27 28 /// Converts a `ParserResult` into a human-readable message. 29 pub fn convert_result<'a, O>(result: ParserResult<'a, O>, input: &'a str) -> String { 30 match result { 31 Ok(_) => "Parsing was successful.".to_string(), 32 Err(error) => match error { 33 NomErr::Incomplete(_) => "Parsing failed to consume the entire input.".to_string(), 34 NomErr::Error(err) | NomErr::Failure(err) => convert_error(input, err), 35 }, 36 } 37 } 38 39 /// Operations to parse a string literal into an object. 40 pub trait Parser: core::fmt::Display + core::str::FromStr { 41 /// Parses a string literal into an object. 42 fn parse(string: &str) -> ParserResult<'_, Self> 43 where 44 Self: Sized; 45 }