nft-faucet/NftFaucet/Models/SolanaAddress.cs
2022-08-02 16:25:26 -05:00

37 lines
1.0 KiB
C#

using System.Text.RegularExpressions;
using CSharpFunctionalExtensions;
namespace NftFaucet.Models;
public class SolanaAddress : ValueObject<SolanaAddress>
{
private SolanaAddress(string value)
{
Value = value;
}
public string Value { get; }
public static implicit operator string(SolanaAddress address) => address.Value;
public static explicit operator SolanaAddress(string address) => Create(address).Value;
public static Result<SolanaAddress> Create(string value)
{
var regex = "^[1-9A-HJ-NP-Za-km-z]{32,44}$";
if (!Regex.IsMatch(value, regex))
{
return Result.Failure<SolanaAddress>("Invalid base58 string");
}
return new SolanaAddress(value);
}
public override string ToString() => Value;
protected override bool EqualsCore(SolanaAddress other)
=> string.Equals(Value, other.Value, StringComparison.InvariantCultureIgnoreCase);
protected override int GetHashCodeCore() => Value.GetHashCode(StringComparison.InvariantCultureIgnoreCase);
}