Class: CairoTypeOption
Defined in: src/utils/cairoDataTypes/cairoTypeOption.ts:30
A Cairo core::option::Option::<T> : either a value, or nothing.
On the wire it is an enum with two branches — 0 then the value for Some, 1 alone for
None. Which branch is meant cannot be read off the value, since Some(0) and None would
look alike, so building one from raw data asks for the variant.
This is the internal shape. What a caller writes and reads back is CairoOption, and handing one of those here says the variant by itself.
Example
const type = 'core::option::Option::<core::integer::u8>';
new CairoTypeOption(7, type, cairoTypeStrategy, CairoOptionVariant.Some).toApiRequest();
// ["0", "7"]
new CairoTypeOption(undefined, type, cairoTypeStrategy, CairoOptionVariant.None).toApiRequest();
// ["1"]
Constructors
Constructor
new CairoTypeOption(
content,optionCairoType,parsingStrategy,variant?,subType?):CairoTypeOption
Defined in: src/utils/cairoDataTypes/cairoTypeOption.ts:120
Build an option, from a value a caller passed or from the felts of a response.
A CairoOption says its own branch, so variant is not given with one — nor with the
response iterator, which reads the branch off the wire. Anywhere else it is required.
subType is what makes an option of options work. Handed a CairoOption, this constructor
unwraps it and calls itself with what was inside, which for a nested option is another
CairoOption; the flag stops that second call from unwrapping again and losing a level, and
sends it to the strategy instead, where the inner type is what gets built.
Parameters
content
unknown
the value, a CairoOption, an instance already built, or the
response iterator
optionCairoType
string
the abi type, core::option::Option::<T>
parsingStrategy
how to build the value
variant?
number
which branch, when the content does not say.
Must be omitted when content is the response iterator.
subType?
boolean = false
true when called from the unwrapping of a nested
CairoOption, which is the only caller that should set it
Returns
CairoTypeOption
Throws
when the type is not an option, when the variant is missing, absurd, or contradicts the content
Example
const type = 'core::option::Option::<core::integer::u8>';
new CairoTypeOption(7, type, cairoTypeStrategy, CairoOptionVariant.Some).toApiRequest();
// ["0", "7"]
new CairoTypeOption(new CairoOption(CairoOptionVariant.Some, 7), type, cairoTypeStrategy).toApiRequest();
// ["0", "7"] the CairoOption says the branch
new CairoTypeOption(['0x0', '0x20'].values(), type, cairoTypeStrategy).toApiRequest();
// ["0", "32"] read off a response
Properties
dynamicSelector
staticdynamicSelector:"CairoTypeOption"
Defined in: src/utils/cairoDataTypes/cairoTypeOption.ts:39
The name this class is registered under in a strategy's dynamicSelectors.
Example
const result = CairoTypeOption.dynamicSelector;
// result = "CairoTypeOption"
dynamicSelector
readonlydynamicSelector:"CairoTypeOption"=CairoTypeOption.dynamicSelector
Defined in: src/utils/cairoDataTypes/cairoTypeOption.ts:51
The selector on the instance, which is how a composite holding it knows what built it.
Example
const type = 'core::option::Option::<core::integer::u8>';
const result = new CairoTypeOption(7, type, cairoTypeStrategy, CairoOptionVariant.Some)
.dynamicSelector;
// result = "CairoTypeOption"
content
readonlycontent:CairoType|undefined
Defined in: src/utils/cairoDataTypes/cairoTypeOption.ts:63
The value this option carries, or nothing at all when it is None.
Example
const type = 'core::option::Option::<core::integer::u8>';
const result = new CairoTypeOption(undefined, type, cairoTypeStrategy, CairoOptionVariant.None)
.content;
// result = undefined
optionCairoType
readonlyoptionCairoType:string
Defined in: src/utils/cairoDataTypes/cairoTypeOption.ts:75
The abi type this option was built for.
Example
const type = 'core::option::Option::<core::integer::u8>';
const result = new CairoTypeOption(7, type, cairoTypeStrategy, CairoOptionVariant.Some)
.optionCairoType;
// result = "core::option::Option::<core::integer::u8>"
isVariantSome
readonlyisVariantSome:boolean
Defined in: src/utils/cairoDataTypes/cairoTypeOption.ts:87
Which of the two branches this option is on.
Example
const type = 'core::option::Option::<core::integer::u8>';
const result = new CairoTypeOption(7, type, cairoTypeStrategy, CairoOptionVariant.Some)
.isVariantSome;
// result = true
Methods
getVariantSomeType()
staticgetVariantSomeType(type):string
Defined in: src/utils/cairoDataTypes/cairoTypeOption.ts:265
The type a Some carries, read out of the option type.
Parameters
type
string
the abi type to read
Returns
string
the type between the angle brackets
Throws
when there is no type between brackets
Example
const result = CairoTypeOption.getVariantSomeType('core::option::Option::<core::integer::u8>');
// result = "core::integer::u8"
validate()
staticvalidate(_input,type,variant):void
Defined in: src/utils/cairoDataTypes/cairoTypeOption.ts:290
Throw unless this is an option type and this variant is one of its two branches.
The value is not read here : what it is worth is the business of the type the option carries, and is checked when that value is built.
Parameters
_input
unknown
the value, which this does not read
type
string
the abi type it is meant for
variant
VariantType | undefined
the branch, when one was given
Returns
void
Throws
when the type is not an option, or the variant is neither 0 nor 1
Example
const type = 'core::option::Option::<core::integer::u16>';
CairoTypeOption.validate(200, type, CairoOptionVariant.Some); // passes
CairoTypeOption.validate(200, type, 3);
// throws Error("In Cairo option, only 0 or 1 variants are authorized.")
is()
staticis(input,type,variant):boolean
Defined in: src/utils/cairoDataTypes/cairoTypeOption.ts:321
Can this be read as an option of this type, on this branch?
The non-throwing form of CairoTypeOption.validate.
Parameters
input
unknown
the value to test
type
string
the abi type it is meant for
variant
the branch
Returns
boolean
true when the type and the variant both fit
Example
const type = 'core::option::Option::<core::integer::u16>';
const result = CairoTypeOption.is(200, type, CairoOptionVariant.Some);
// result = true
const result2 = CairoTypeOption.is(200, type, 3);
// result2 = false
isAbiType()
staticisAbiType(type):boolean
Defined in: src/utils/cairoDataTypes/cairoTypeOption.ts:342
Is this abi type an option?
Parameters
type
string
the abi type to test
Returns
boolean
true for core::option::Option::<T>
Example
const result = CairoTypeOption.isAbiType('core::option::Option::<core::integer::u16>');
// result = true
const result2 = CairoTypeOption.isAbiType('core::integer::u16');
// result2 = false
toApiRequest()
toApiRequest():
string[]
Defined in: src/utils/cairoDataTypes/cairoTypeOption.ts:361
Serialize to the felts a contract call carries.
The branch comes first, and the value only follows it on Some — a None is one felt, and
that is the whole of it.
Returns
string[]
the branch then the value, flagged as compiled
Example
const type = 'core::option::Option::<core::integer::u8>';
new CairoTypeOption(8, type, cairoTypeStrategy, CairoOptionVariant.Some).toApiRequest();
// ["0", "8"]
new CairoTypeOption(undefined, type, cairoTypeStrategy, CairoOptionVariant.None).toApiRequest();
// ["1"]
decompose()
decompose(
strategyDecompose):CairoOption<any>
Defined in: src/utils/cairoDataTypes/cairoTypeOption.ts:413
Read the option back as the CairoOption a caller reads.
Parameters
strategyDecompose
how to read the value back
Returns
CairoOption<any>
the option, on the branch it was built with
Throws
when no strategy can read the value back
Example
const type = 'core::option::Option::<core::integer::u8>';
const option = new CairoTypeOption(3, type, cairoTypeStrategy, CairoOptionVariant.Some);
const result = option.decompose(cairoTypeStrategy).unwrap();
// result = 3n