philips-software/cogito

View on GitHub
workspaces/cogito-ios-app/Cogito/Geth/Address.swift

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import Foundation

struct Address: Codable {
    let value: String

    init?(fromHex hex: String) {
        guard hex.isValidEthereumAddress else {
            return nil
        }
        value = hex
    }

    init(from decoder: Decoder) throws {
        value = try String(from: decoder)
    }

    func encode(to encoder: Encoder) throws {
        try value.encode(to: encoder)
    }
}

extension String {
    var isValidEthereumAddress: Bool {
        return self.range(of: "^0x[a-fA-F0-9]{40}$", options: .regularExpression) != nil
    }
}

extension Address: CustomStringConvertible {
    var description: String {
        return value
    }
}

extension Address: Equatable {
    static func == (lhs: Address, rhs: Address) -> Bool {
        return lhs.value.lowercased() == rhs.value.lowercased()
    }
}