use crate::error::ParseError;
use crate::identifier::Identifier;
const DERIVATION_MARKER: u8 = b'\'';
pub(crate) fn parse(input: &str) -> Result<Identifier, ParseError> {
parse_bytes(input.as_bytes())
}
pub(crate) fn parse_bytes(bytes: &[u8]) -> Result<Identifier, ParseError> {
let (core, derived) = match bytes.split_last() {
Some((&DERIVATION_MARKER, rest)) => (rest, true),
_ => (bytes, false),
};
if core.contains(&DERIVATION_MARKER) {
return Err(ParseError::DerivationMarker);
}
let pin = sashite_pin::Identifier::try_from(core)?;
Ok(Identifier::new(pin, derived))
}