Add currency() method to DidPkh type
This commit is contained in:
parent
af0563759d
commit
46526fd4be
4 changed files with 15 additions and 21 deletions
|
@ -1,3 +1,4 @@
|
|||
use std::convert::TryInto;
|
||||
use std::str::FromStr;
|
||||
|
||||
use regex::Regex;
|
||||
|
@ -28,6 +29,10 @@ impl DidPkh {
|
|||
let address = currency.normalize_address(address);
|
||||
Self { chain_id, address }
|
||||
}
|
||||
|
||||
pub fn currency(&self) -> Option<Currency> {
|
||||
(&self.chain_id).try_into().ok()
|
||||
}
|
||||
}
|
||||
|
||||
impl ToString for DidPkh {
|
||||
|
@ -138,6 +143,7 @@ mod tests {
|
|||
fn test_did_string_conversion() {
|
||||
let address = "0xB9C5714089478a327F09197987f16f9E5d936E8a";
|
||||
let did = DidPkh::from_address(ÐEREUM, address);
|
||||
assert_eq!(did.currency().unwrap(), ETHEREUM);
|
||||
assert_eq!(did.address, address.to_lowercase());
|
||||
|
||||
let did_str = did.to_string();
|
||||
|
|
|
@ -19,7 +19,6 @@ use crate::models::users::types::{
|
|||
validate_local_username,
|
||||
User,
|
||||
};
|
||||
use crate::utils::currencies::get_identity_proof_field_name;
|
||||
use crate::utils::files::{FileError, save_validated_b64_file, get_file_url};
|
||||
|
||||
/// https://docs.joinmastodon.org/entities/field/
|
||||
|
@ -72,7 +71,8 @@ impl Account {
|
|||
let mut identity_proofs = vec![];
|
||||
for proof in profile.identity_proofs.clone().into_inner() {
|
||||
// Skip proof if it doesn't map to field name
|
||||
if let Some(field_name) = get_identity_proof_field_name(&proof.proof_type) {
|
||||
if let Some(currency) = proof.issuer.currency() {
|
||||
let field_name = currency.field_name();
|
||||
let field = AccountField {
|
||||
name: field_name,
|
||||
value: proof.issuer.address,
|
||||
|
|
|
@ -10,7 +10,7 @@ use crate::models::cleanup::{
|
|||
DeletionQueue,
|
||||
};
|
||||
use crate::models::relationships::types::RelationshipType;
|
||||
use crate::utils::currencies::{get_currency_field_name, Currency};
|
||||
use crate::utils::currencies::Currency;
|
||||
use crate::utils::id::new_uuid;
|
||||
use super::types::{
|
||||
DbActorProfile,
|
||||
|
@ -383,7 +383,7 @@ pub async fn search_profile_by_wallet_address(
|
|||
wallet_address: &str,
|
||||
prefer_verified: bool,
|
||||
) -> Result<Vec<DbActorProfile>, DatabaseError> {
|
||||
let field_name = get_currency_field_name(currency);
|
||||
let field_name = currency.field_name();
|
||||
let did_str = DidPkh::from_address(currency, wallet_address).to_string();
|
||||
// If currency is Ethereum,
|
||||
// search over extra fields must be case insensitive.
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
use std::convert::TryFrom;
|
||||
|
||||
use crate::errors::ConversionError;
|
||||
use crate::ethereum::identity::ETHEREUM_EIP191_PROOF;
|
||||
use super::caip2::ChainId;
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
|
@ -16,6 +15,10 @@ impl Currency {
|
|||
}.to_string()
|
||||
}
|
||||
|
||||
pub fn field_name(&self) -> String {
|
||||
format!("${}", self.code())
|
||||
}
|
||||
|
||||
/// Returns CAIP-2 chain ID
|
||||
pub fn chain_id(&self) -> ChainId {
|
||||
self.into()
|
||||
|
@ -55,18 +58,6 @@ impl TryFrom<&ChainId> for Currency {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn get_currency_field_name(currency: &Currency) -> String {
|
||||
format!("${}", currency.code())
|
||||
}
|
||||
|
||||
pub fn get_identity_proof_field_name(proof_type: &str) -> Option<String> {
|
||||
let field_name = match proof_type {
|
||||
ETHEREUM_EIP191_PROOF => "$ETH".to_string(),
|
||||
_ => return None,
|
||||
};
|
||||
Some(field_name)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
@ -82,9 +73,6 @@ mod tests {
|
|||
#[test]
|
||||
fn test_get_currency_field_name() {
|
||||
let ethereum = Currency::Ethereum;
|
||||
assert_eq!(
|
||||
get_currency_field_name(ðereum),
|
||||
"$ETH",
|
||||
);
|
||||
assert_eq!(ethereum.field_name(), "$ETH");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue