pub enum Did { Web(String), Plc(String), } enum DidError { UnknownMethod, MalformedDid, } impl Did { fn from(did: String) -> Result { if did.starts_with("did:plc:") { return Ok(Did::Plc(String::from(did[8..]))); } else if did.starts_with("did:web:") { return Ok(Did::Plc(String::from(did[8..]))); } else if did.starts_with("did:") { return Err(DidError::UnknownMethod); } else { return Err(DidError::MalformedDid); } } } pub struct User { handle: Option, did: Did, pds: String, } enum UserFromErr { InvalidHandle, NoDidForHandle, HandleNotBidirectional, DidParseError(DidError), DidNotBidirectional, NoPds, } impl User { fn fromHandle(handle: String) -> Result {} fn fromDid(did: String) -> Result {} }