Copyright | (c) 2023 GYELD GMBH |
---|---|
License | Apache 2.0 |
Maintainer | [email protected] |
Stability | develop |
Safe Haskell | Safe-Inferred |
Language | GHC2021 |
GeniusYield.Types.Value
Description
Synopsis
- data GYValue
- valueMake ∷ Map GYAssetClass Integer → GYValue
- valueToPlutus ∷ GYValue → Value
- valueFromPlutus ∷ Value → Either GYFromPlutusValueError GYValue
- valueToApi ∷ GYValue → Value
- valueFromApi ∷ Value → GYValue
- valueSingleton ∷ GYAssetClass → Integer → GYValue
- valueFromList ∷ [(GYAssetClass, Integer)] → GYValue
- valueToList ∷ GYValue → [(GYAssetClass, Integer)]
- valueToMap ∷ GYValue → Map GYAssetClass Integer
- valueMap ∷ (GYAssetClass → Integer → Integer) → GYValue → GYValue
- valueTotalAssets ∷ GYValue → Int
- valueInsert ∷ GYAssetClass → Integer → GYValue → GYValue
- valueAdjust ∷ (Integer → Integer) → GYAssetClass → GYValue → GYValue
- valueAdjustOverDefault ∷ (Integer → Integer) → GYAssetClass → GYValue → GYValue
- valueAlter ∷ (Maybe Integer → Maybe Integer) → GYAssetClass → GYValue → GYValue
- valueFromLovelace ∷ Integer → GYValue
- valueFromApiTxOutValue ∷ TxOutValue era → GYValue
- valueToApiTxOutValue ∷ GYValue → TxOutValue ApiEra
- valueAssets ∷ GYValue → Set GYAssetClass
- valueWithoutAssets ∷ GYValue → Set GYAssetClass → GYValue
- valueRestrictAssets ∷ GYValue → Set GYAssetClass → GYValue
- parseValueKM ∷ Bool → KeyMap Value → Parser GYValue
- valueMinus ∷ GYValue → GYValue → GYValue
- valueMonus ∷ GYValue → GYValue → GYValue
- valueNegate ∷ GYValue → GYValue
- valuePositive ∷ GYValue → Bool
- valueNonNegative ∷ GYValue → Bool
- valueGreaterOrEqual ∷ GYValue → GYValue → Bool
- valueGreater ∷ GYValue → GYValue → Bool
- valueLessOrEqual ∷ GYValue → GYValue → Bool
- valueUnionWith ∷ (Integer → Integer → Integer) → GYValue → GYValue → GYValue
- valueIntersection ∷ GYValue → GYValue → GYValue
- valueIntersectionWith ∷ (Integer → Integer → Integer) → GYValue → GYValue → GYValue
- valueAssetClass ∷ GYValue → GYAssetClass → Integer
- valueAssetPresent ∷ GYValue → GYAssetClass → Bool
- valueSplitAda ∷ GYValue → (Integer, GYValue)
- valueAda ∷ GYValue → Integer
- valueNonAda ∷ GYValue → GYValue
- valueSplitSign ∷ GYValue → (GYValue, GYValue)
- isEmptyValue ∷ GYValue → Bool
- valueVerifyNonNegative ∷ GYValue → Maybe (Map GYAssetClass Natural)
- valueValid ∷ GYValue → Bool
- data GYFromPlutusValueError
- data GYAssetClass
- assetClassToPlutus ∷ GYAssetClass → AssetClass
- assetClassFromPlutus ∷ AssetClass → Either GYFromPlutusValueError GYAssetClass
- parseAssetClassWithSep ∷ Char → Text → Either String GYAssetClass
- parseAssetClassWithoutSep ∷ Text → Either String GYAssetClass
- parseAssetClassCore ∷ Char → (ByteString → Parser GYTokenName) → Text → Either String GYAssetClass
- newtype GYTokenName = GYTokenName ByteString
- tokenNameToHex ∷ GYTokenName → Text
- tokenNameFromBS ∷ ByteString → Maybe GYTokenName
- tokenNameToPlutus ∷ GYTokenName → TokenName
- tokenNameFromPlutus ∷ HasCallStack ⇒ TokenName → Maybe GYTokenName
- tokenNameToApi ∷ GYTokenName → AssetName
- tokenNameFromHex ∷ Text → Either Text GYTokenName
- unsafeTokenNameFromHex ∷ Text → GYTokenName
- makeAssetClass ∷ Text → Text → Either String GYAssetClass
Value
Value: a (total) map from asset classes (GYAssetClass
) to amount (Integer
).
Instances
FromJSON GYValue # |
|
Defined in GeniusYield.Types.Value | |
ToJSON GYValue # |
|
Monoid GYValue # | |
Semigroup GYValue # | |
Show GYValue # | |
PrintfArg GYValue # |
|
Defined in GeniusYield.Types.Value | |
FromField GYValue # | |
Defined in GeniusYield.Types.Value Methods parseField ∷ Field → Parser GYValue # | |
ToField GYValue # | |
Defined in GeniusYield.Types.Value | |
Eq GYValue # | |
Ord GYValue # | |
ToSchema GYValue # | |
Defined in GeniusYield.Types.Value Methods declareNamedSchema ∷ Proxy GYValue → Declare (Definitions Schema) NamedSchema # |
valueFromPlutus ∷ Value → Either GYFromPlutusValueError GYValue #
Converts a Plutus Value
to a GYValue
.
Returns Left GYFromPlutusValueError
if it fails.
valueSingleton ∷ GYAssetClass → Integer → GYValue #
Returns a GYValue
containing only the given GYAssetClass
with the given amount.
>>>
valueSingleton (GYToken "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef" "GOLD") 100
valueFromList [(GYToken "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef" "GOLD",100)]
valueFromList ∷ [(GYAssetClass, Integer)] → GYValue #
Create GYValue
from a list of asset class and amount.
Duplicates are merged.
valueToList ∷ GYValue → [(GYAssetClass, Integer)] #
Returns a list of all GYAssetClass
and amount pairs contained in a given GYValue
.
valueToMap ∷ GYValue → Map GYAssetClass Integer #
Returns a map from GYAssetClass
to their amount contained in a given GYValue
.
valueMap ∷ (GYAssetClass → Integer → Integer) → GYValue → GYValue #
Map operation over the GYValue
s amounts.
valueTotalAssets ∷ GYValue → Int #
Returns the total count of assets in a given GYValue
valueInsert ∷ GYAssetClass → Integer → GYValue → GYValue #
Insert an asset with its quantity.
valueAdjust ∷ (Integer → Integer) → GYAssetClass → GYValue → GYValue #
Adjust the amount of a given GYAssetClass
in the given GYValue
.
If the asset is not present in the value, original value is returned instead.
If the result of the adjustment is zero, the asset is removed from the value.
valueAdjustOverDefault ∷ (Integer → Integer) → GYAssetClass → GYValue → GYValue #
Same as valueAdjust
but if the asset is not present in the value, we apply the function to 0 and insert the resultant (if non-zero) into the value.
valueAlter ∷ (Maybe Integer → Maybe Integer) → GYAssetClass → GYValue → GYValue #
The expression (
) alters the value valueAlter
f asc valx
at asc
, or absence thereof.
valueAlter
can be used to insert, delete, or update a value in a GYValue
.
>>>
valueAlter (Just . maybe 1 (+ 1)) GYLovelace $ mempty
valueFromList [(GYLovelace,1)]
>>>
valueAlter (Just . maybe 1 (+ 1)) GYLovelace $ valueFromList [(GYLovelace, 1)]
valueFromList [(GYLovelace,2)]
valueFromLovelace ∷ Integer → GYValue #
>>>
valueFromLovelace 0
valueFromList []
>>>
valueFromLovelace 100
valueFromList [(GYLovelace,100)]
valueFromApiTxOutValue ∷ TxOutValue era → GYValue #
valueAssets ∷ GYValue → Set GYAssetClass #
Set of assets within a GYValue
in non-zero quantities.
Arguments
∷ Bool | Attempt to try parsing without separator in asset class when parsing fails with separator. |
→ KeyMap Value | JSON object. |
→ Parser GYValue |
Parse a GYValue
from a JSON object.
Arithmetic
valueMinus ∷ GYValue → GYValue → GYValue #
Subtracts the second GYValue
from the first one (asset class by asset class). Note that zero entries are filtered for.
>>>
valueFromList [(GYLovelace, 100)] `valueMinus` valueFromList [(GYLovelace, 200)]
valueFromList [(GYLovelace,-100)]
>>>
valueFromList [(GYLovelace, 100)] `valueMinus` valueFromList [(GYLovelace, 100)]
valueFromList []
valueMonus ∷ GYValue → GYValue → GYValue #
Subtracts the second GYValue
from the first one (asset class by asset class). However, this differs from valueMinus
in that it filters out negative amounts (zero amounts are already filtered by valueMinus
).
>>>
valueFromList [(GYLovelace, 100)] `valueMonus` valueFromList [(GYLovelace, 200)]
valueFromList []
>>>
valueFromList [(GYLovelace, 100)] `valueMonus` valueFromList [(GYLovelace, 50)]
valueFromList [(GYLovelace,50)]
valueNegate ∷ GYValue → GYValue #
Returns the given GYValue
with all amounts negated.
valueNonNegative ∷ GYValue → Bool #
valueGreaterOrEqual ∷ GYValue → GYValue → Bool #
valueGreater ∷ GYValue → GYValue → Bool #
valueLessOrEqual ∷ GYValue → GYValue → Bool #
Unions & Intersections
valueUnionWith ∷ (Integer → Integer → Integer) → GYValue → GYValue → GYValue #
Combine two values with given function.
valueIntersection ∷ GYValue → GYValue → GYValue #
Left biased intersection of two GYValue
s.
Persist only the assets in the first value that also exist in the second.
valueIntersectionWith ∷ (Integer → Integer → Integer) → GYValue → GYValue → GYValue #
Intersection of two GYValue
s with a combining function.
Lookup
valueAssetClass ∷ GYValue → GYAssetClass → Integer #
Returns the amount of a GYAssetClass
contained in the given GYValue
.
Splitting
valueSplitAda ∷ GYValue → (Integer, GYValue) #
Splits a GYValue
into the lovelace amount and the rest of it's components.
>>>
valueSplitAda $ valueFromLovelace 100
(100,valueFromList [])
>>>
valueSplitAda $ valueFromList [(GYLovelace, 100), (GYToken "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef" "GOLD",101)]
(100,valueFromList [(GYToken "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef" "GOLD",101)])
valueNonAda ∷ GYValue → GYValue #
Removes the lovelace amount from a GYValue
.
valueSplitSign ∷ GYValue → (GYValue, GYValue) #
Split a GYValue
into its positive and negative components. The first element of
the pair is the positive components of the value. The second element is the negative component.
>>>
valueSplitSign $ valueFromList [(GYLovelace,22),(GYToken "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef" "GOLD",-10)]
(valueFromList [(GYLovelace,22)],valueFromList [(GYToken "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef" "GOLD",10)])
Predicates
isEmptyValue ∷ GYValue → Bool #
Checks if the given GYValue
is empty
>>>
isEmptyValue mempty
True
>>>
isEmptyValue $ valueFromLovelace 100
False
>>>
isEmptyValue $ valueMinus (valueFromLovelace 100) (valueFromLovelace 100)
True
valueVerifyNonNegative ∷ GYValue → Maybe (Map GYAssetClass Natural) #
Verify the value only consists of positive amounts, returning a map containing naturals as a result.
Debug
valueValid ∷ GYValue → Bool #
Conversion errors
data GYFromPlutusValueError #
Constructors
GYTokenNameTooBig !TokenName | Length of the token name bytestring is more than 32. |
GYInvalidPolicyId !CurrencySymbol | PolicyId deserialization failure. |
Instances
Show GYFromPlutusValueError # | |
Defined in GeniusYield.Types.Value Methods showsPrec ∷ Int → GYFromPlutusValueError → ShowS # show ∷ GYFromPlutusValueError → String # showList ∷ [GYFromPlutusValueError] → ShowS # | |
Eq GYFromPlutusValueError # | |
Defined in GeniusYield.Types.Value Methods (==) ∷ GYFromPlutusValueError → GYFromPlutusValueError → Bool # (/=) ∷ GYFromPlutusValueError → GYFromPlutusValueError → Bool # |
Asset class
data GYAssetClass #
Asset class. Either lovelace or minted token.
Constructors
GYLovelace | |
GYToken GYMintingPolicyId GYTokenName |
Instances
FromJSON GYAssetClass # |
|
Defined in GeniusYield.Types.Value | |
FromJSONKey GYAssetClass # | |
Defined in GeniusYield.Types.Value | |
ToJSON GYAssetClass # |
|
Defined in GeniusYield.Types.Value Methods toJSON ∷ GYAssetClass → Value # toEncoding ∷ GYAssetClass → Encoding # toJSONList ∷ [GYAssetClass] → Value # toEncodingList ∷ [GYAssetClass] → Encoding # omitField ∷ GYAssetClass → Bool # | |
ToJSONKey GYAssetClass # | |
Defined in GeniusYield.Types.Value | |
IsString GYAssetClass # | |
Defined in GeniusYield.Types.Value Methods | |
Generic GYAssetClass # | |
Defined in GeniusYield.Types.Value Associated Types type Rep GYAssetClass ∷ Type → Type # | |
Show GYAssetClass # | |
Defined in GeniusYield.Types.Value Methods showsPrec ∷ Int → GYAssetClass → ShowS # show ∷ GYAssetClass → String # showList ∷ [GYAssetClass] → ShowS # | |
PrintfArg GYAssetClass # |
|
Defined in GeniusYield.Types.Value | |
FromField GYAssetClass # |
|
Defined in GeniusYield.Types.Value Methods | |
ToField GYAssetClass # |
|
Defined in GeniusYield.Types.Value Methods toField ∷ GYAssetClass → Field # | |
Eq GYAssetClass # | |
Defined in GeniusYield.Types.Value | |
Ord GYAssetClass # | |
Defined in GeniusYield.Types.Value Methods compare ∷ GYAssetClass → GYAssetClass → Ordering # (<) ∷ GYAssetClass → GYAssetClass → Bool # (<=) ∷ GYAssetClass → GYAssetClass → Bool # (>) ∷ GYAssetClass → GYAssetClass → Bool # (>=) ∷ GYAssetClass → GYAssetClass → Bool # max ∷ GYAssetClass → GYAssetClass → GYAssetClass # min ∷ GYAssetClass → GYAssetClass → GYAssetClass # | |
Hashable GYAssetClass # | |
Defined in GeniusYield.Types.Value | |
FromHttpApiData GYAssetClass # | Note: not used currently by API (tests only)
|
Defined in GeniusYield.Types.Value Methods parseUrlPiece ∷ Text → Either Text GYAssetClass # | |
ToHttpApiData GYAssetClass # |
|
Defined in GeniusYield.Types.Value Methods toUrlPiece ∷ GYAssetClass → Text # toEncodedUrlPiece ∷ GYAssetClass → Builder # toHeader ∷ GYAssetClass → ByteString # | |
ToParamSchema GYAssetClass # | |
Defined in GeniusYield.Types.Value Methods toParamSchema ∷ ∀ (t ∷ SwaggerKind Type). Proxy GYAssetClass → ParamSchema t # | |
ToSchema GYAssetClass # | |
Defined in GeniusYield.Types.Value Methods declareNamedSchema ∷ Proxy GYAssetClass → Declare (Definitions Schema) NamedSchema # | |
type Rep GYAssetClass # | |
Defined in GeniusYield.Types.Value type Rep GYAssetClass = D1 ('MetaData "GYAssetClass" "GeniusYield.Types.Value" "atlas-cardano-0.13.0-inplace" 'False) (C1 ('MetaCons "GYLovelace" 'PrefixI 'False) (U1 ∷ Type → Type) :+: C1 ('MetaCons "GYToken" 'PrefixI 'False) (S1 ('MetaSel ('Nothing ∷ Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 GYMintingPolicyId) :*: S1 ('MetaSel ('Nothing ∷ Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 GYTokenName))) |
assetClassToPlutus ∷ GYAssetClass → AssetClass #
Converts a GYAssetClass
into a Plutus AssetClass
.
assetClassFromPlutus ∷ AssetClass → Either GYFromPlutusValueError GYAssetClass #
Converts a Plutus AssetClass
into a GYAssetClass
.
Returns Left GYFromPlutusValueError
if it fails.
parseAssetClassWithSep ∷ Char → Text → Either String GYAssetClass #
Parse hex encoded currency symbol and hex encoded token name separated by the given separator.
>>> parseAssetClassWithSep .
"lovelace"
Right GYLovelace
>>>
parseAssetClassWithSep '.' ""
Right GYLovelace
>>>
parseAssetClassWithSep '.' "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef.476f6c64"
Right (GYToken "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef" "Gold")>>>
parseAssetClassWithSep '#' "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef#476f6c64"
Right (GYToken "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef" "Gold")>>>
parseAssetClassWithSep '#' "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef#"
Right (GYToken "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef" "")
parseAssetClassWithoutSep ∷ Text → Either String GYAssetClass #
Parse hex encoded currency symbol and hex encoded token name joined together without any separator. >>> parseAssetClassWithoutSep "lovelace" Right GYLovelace
>>>
parseAssetClassWithoutSep ""
Right GYLovelace
>>>
parseAssetClassWithoutSep "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef476f6c64"
Right (GYToken "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef" "Gold")>>>
parseAssetClassWithoutSep "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef"
Right (GYToken "ff80aaaf03a273b8f5c558168dc0e2377eea810badbae6eceefc14ef" "")
parseAssetClassCore ∷ Char → (ByteString → Parser GYTokenName) → Text → Either String GYAssetClass #
Token name
newtype GYTokenName #
Token name is an arbitrary byte string up to 32 bytes long.
TODO: it's unclear whether it's an arbitrary byte string or UTF8 encoded text #32 (which encoded byte form is 32 byte long at most). (https:/github.comgeniusyieldatlasissues/32) We treat it as an arbitrary string.
>>>
LBS8.putStrLn $ Aeson.encode ("Gold" :: GYTokenName)
"476f6c64"
Constructors
GYTokenName ByteString |
Instances
FromJSON GYTokenName # |
|
Defined in GeniusYield.Types.Value | |
ToJSON GYTokenName # |
|
Defined in GeniusYield.Types.Value Methods toJSON ∷ GYTokenName → Value # toEncoding ∷ GYTokenName → Encoding # toJSONList ∷ [GYTokenName] → Value # toEncodingList ∷ [GYTokenName] → Encoding # omitField ∷ GYTokenName → Bool # | |
IsString GYTokenName # | Does NOT UTF8-encode. |
Defined in GeniusYield.Types.Value Methods fromString ∷ String → GYTokenName # | |
Show GYTokenName # | |
Defined in GeniusYield.Types.Value Methods showsPrec ∷ Int → GYTokenName → ShowS # show ∷ GYTokenName → String # showList ∷ [GYTokenName] → ShowS # | |
Eq GYTokenName # | |
Defined in GeniusYield.Types.Value | |
Ord GYTokenName # | |
Defined in GeniusYield.Types.Value Methods compare ∷ GYTokenName → GYTokenName → Ordering # (<) ∷ GYTokenName → GYTokenName → Bool # (<=) ∷ GYTokenName → GYTokenName → Bool # (>) ∷ GYTokenName → GYTokenName → Bool # (>=) ∷ GYTokenName → GYTokenName → Bool # max ∷ GYTokenName → GYTokenName → GYTokenName # min ∷ GYTokenName → GYTokenName → GYTokenName # | |
FromHttpApiData GYTokenName # |
|
Defined in GeniusYield.Types.Value Methods parseUrlPiece ∷ Text → Either Text GYTokenName # | |
ToParamSchema GYTokenName # | |
Defined in GeniusYield.Types.Value Methods toParamSchema ∷ ∀ (t ∷ SwaggerKind Type). Proxy GYTokenName → ParamSchema t # | |
ToSchema GYTokenName # | |
Defined in GeniusYield.Types.Value Methods declareNamedSchema ∷ Proxy GYTokenName → Declare (Definitions Schema) NamedSchema # |
tokenNameFromPlutus ∷ HasCallStack ⇒ TokenName → Maybe GYTokenName #
Convert Plutus TokenName
to GYTokenName
.
makeAssetClass ∷ Text → Text → Either String GYAssetClass #