morley-1.17.0: src/Morley/Tezos/Address/Alias.hs
-- SPDX-FileCopyrightText: 2022 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA
module Morley.Tezos.Address.Alias
( AddressOrAlias(..)
, Alias(..)
)
where
import Data.Aeson (FromJSON, ToJSON)
import Fmt (Buildable(..))
import Options.Applicative qualified as Opt
import Morley.Tezos.Address (Address, parseAddress)
import Morley.Util.CLI (HasCLReader(..))
-- | @tezos-client@ can associate addresses with textual aliases.
-- This type denotes such an alias.
newtype Alias = Alias
{ unAlias :: Text
-- ^ Extract 'Text' from 'Alias'.
}
deriving stock (Show, Eq, Ord)
deriving newtype (Buildable, ToJSON, FromJSON)
-- | Representation of an address that @tezos-client@ uses. It can be
-- an address itself or a textual alias.
data AddressOrAlias
= AddressResolved Address
-- ^ Address itself, can be used as is.
| AddressAlias Alias
-- ^ Address alias, should be resolved by @tezos-client@.
deriving stock (Show, Eq, Ord)
instance HasCLReader AddressOrAlias where
getReader =
Opt.str <&> \addrOrAlias ->
case parseAddress addrOrAlias of
Right addr -> AddressResolved addr
Left _ -> AddressAlias (Alias addrOrAlias)
getMetavar = "ADDRESS OR ALIAS"
instance Buildable AddressOrAlias where
build = \case
AddressResolved addr -> build addr
AddressAlias alias -> build alias