aptos-move/framework/aptos-stdlib/doc/any.md
<a id="0x1_any"></a>
0x1::any<a id="0x1_any_Any"></a>
AnyA type which can represent a value of any type. This allows for representation of 'unknown' future values. For example, to define a resource such that it can be later be extended without breaking changes one can do
struct Resource {
field: Type,
...
extension: Option<Any>
}
<a id="@Constants_0"></a>
<a id="0x1_any_ETYPE_MISMATCH"></a>
The type provided for <code>unpack</code> is not the same as was given for <code>pack</code>.
<pre><code><b>const</b> <a href="any.md#0x1_any_ETYPE_MISMATCH">ETYPE_MISMATCH</a>: u64 = 1; </code></pre><a id="0x1_any_pack"></a>
packPack a value into the <code><a href="any.md#0x1_any_Any">Any</a></code> representation. Because Any can be stored and dropped, this is also required from <code>T</code>.
<pre><code><b>public</b> <b>fun</b> <a href="any.md#0x1_any_pack">pack</a><T: drop, store>(x: T): <a href="any.md#0x1_any_Any">any::Any</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="any.md#0x1_any_pack">pack</a><T: drop + store>(x: T): <a href="any.md#0x1_any_Any">Any</a> { <a href="any.md#0x1_any_Any">Any</a> { type_name: <a href="type_info.md#0x1_type_info_type_name">type_info::type_name</a><T>(), data: to_bytes(&x) } } </code></pre> </details><a id="0x1_any_unpack"></a>
unpackUnpack a value from the <code><a href="any.md#0x1_any_Any">Any</a></code> representation. This aborts if the value has not the expected type <code>T</code>.
<pre><code><b>public</b> <b>fun</b> <a href="any.md#0x1_any_unpack">unpack</a><T>(self: <a href="any.md#0x1_any_Any">any::Any</a>): T </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="any.md#0x1_any_unpack">unpack</a><T>(self: <a href="any.md#0x1_any_Any">Any</a>): T { <b>assert</b>!(<a href="type_info.md#0x1_type_info_type_name">type_info::type_name</a><T>() == self.type_name, <a href="../../move-stdlib/doc/error.md#0x1_error_invalid_argument">error::invalid_argument</a>(<a href="any.md#0x1_any_ETYPE_MISMATCH">ETYPE_MISMATCH</a>)); from_bytes<T>(self.data) } </code></pre> </details><a id="0x1_any_type_name"></a>
type_nameReturns the type name of this Any
<pre><code><b>public</b> <b>fun</b> <a href="any.md#0x1_any_type_name">type_name</a>(self: &<a href="any.md#0x1_any_Any">any::Any</a>): &<a href="../../move-stdlib/doc/string.md#0x1_string_String">string::String</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="any.md#0x1_any_type_name">type_name</a>(self: &<a href="any.md#0x1_any_Any">Any</a>): &String { &self.type_name } </code></pre> </details><a id="@Specification_1"></a>
<a id="@Specification_1_pack"></a>
pack<a id="@Specification_1_unpack"></a>
unpack<a id="0x1_any_UnpackAbortsIf"></a>
<pre><code><b>schema</b> <a href="any.md#0x1_any_UnpackAbortsIf">UnpackAbortsIf</a><T> { self: <a href="any.md#0x1_any_Any">Any</a>; <b>aborts_if</b> <a href="type_info.md#0x1_type_info_type_name">type_info::type_name</a><T>() != self.type_name; <b>aborts_if</b> !<a href="from_bcs.md#0x1_from_bcs_deserializable">from_bcs::deserializable</a><T>(self.data); } </code></pre><a id="0x1_any_UnpackRequirement"></a>
<pre><code><b>schema</b> <a href="any.md#0x1_any_UnpackRequirement">UnpackRequirement</a><T> { self: <a href="any.md#0x1_any_Any">Any</a>; <b>requires</b> <a href="type_info.md#0x1_type_info_type_name">type_info::type_name</a><T>() == self.type_name; <b>requires</b> <a href="from_bcs.md#0x1_from_bcs_deserializable">from_bcs::deserializable</a><T>(self.data); } </code></pre><a id="@Specification_1_type_name"></a>
type_name