Pubkey.swift (915B)
1 // 2 // Pubkey.swift 3 // damus 4 // 5 // Created by William Casarin on 2023-07-28. 6 // 7 8 import Foundation 9 10 struct Pubkey: IdType, TagKey, TagConvertible, Identifiable { 11 let id: Data 12 13 var tag: [String] { 14 [keychar.description, self.hex()] 15 } 16 17 init?(hex: String) { 18 guard let id = hex_decode_pubkey(hex) else { 19 return nil 20 } 21 self = id 22 } 23 24 init(_ data: Data) { 25 self.id = data 26 } 27 28 var npub: String { 29 bech32_pubkey(self) 30 } 31 32 var keychar: AsciiCharacter { "p" } 33 34 static func from_tag(tag: TagSequence) -> Pubkey? { 35 var i = tag.makeIterator() 36 guard tag.count >= 2, 37 let t0 = i.next(), 38 let key = t0.single_char, 39 key == "p", 40 let t1 = i.next(), 41 let pubkey = t1.id().map(Pubkey.init) 42 else { return nil } 43 44 return pubkey 45 } 46 47 } 48