crates/sui-framework/docs/sui/bcs.md
This module implements BCS (de)serialization in Move. Full specification can be found here: https://github.com/diem/bcs
Short summary (for Move-supported types):
Usage example:
/// This function reads u8 and u64 value from the input
/// and returns the rest of the bytes.
fun deserialize(bytes: vector<u8>): (u8, u64, vector<u8>) {
use sui::bcs::{Self, BCS};
let prepared: BCS = bcs::new(bytes);
let (u8_value, u64_value) = (
prepared.peel_u8(),
prepared.peel_u64()
);
// unpack bcs struct
let leftovers = prepared.into_remainder_bytes();
(u8_value, u64_value, leftovers)
}
BCSto_bytesnewinto_remainder_bytespeel_addresspeel_boolpeel_u8peel_numpeel_u16peel_u32peel_u64peel_u128peel_u256peel_vec_lengthpeel_vecpeel_vec_addresspeel_vec_boolpeel_vec_u8peel_vec_vec_u8peel_vec_u16peel_vec_u32peel_vec_u64peel_vec_u128peel_vec_u256peel_enum_tagpeel_optionpeel_option_addresspeel_option_boolpeel_option_u8peel_option_u16peel_option_u32peel_option_u64peel_option_u128peel_option_u256<a name="sui_bcs_BCS"></a>
BCSA helper struct that saves resources on operations. For better vector performance, it stores reversed bytes of the BCS and enables use of <code>vector::pop_back</code>.
<pre><code><b>public</b> <b>struct</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a> <b>has</b> <b>copy</b>, drop, store </code></pre> <details> <summary>Fields</summary> <dl> <dt> <code>bytes: vector<u8></code> </dt> <dd> </dd> </dl> </details><a name="@Constants_0"></a>
<a name="sui_bcs_EOutOfRange"></a>
For when bytes length is less than required for deserialization.
<pre><code><b>const</b> <a href="../sui/bcs.md#sui_bcs_EOutOfRange">EOutOfRange</a>: u64 = 0; </code></pre><a name="sui_bcs_ENotBool"></a>
For when the boolean value different than <code>0</code> or <code>1</code>.
<pre><code><b>const</b> <a href="../sui/bcs.md#sui_bcs_ENotBool">ENotBool</a>: u64 = 1; </code></pre><a name="sui_bcs_ELenOutOfRange"></a>
For when ULEB byte is out of range (or not found).
<pre><code><b>const</b> <a href="../sui/bcs.md#sui_bcs_ELenOutOfRange">ELenOutOfRange</a>: u64 = 2; </code></pre><a name="sui_bcs_to_bytes"></a>
to_bytesGet BCS serialized bytes for any value. Re-exports stdlib <code><a href="../sui/bcs.md#sui_bcs_to_bytes">bcs::to_bytes</a></code>.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_to_bytes">to_bytes</a><T>(value: &T): vector<u8> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_to_bytes">to_bytes</a><T>(value: &T): vector<u8> { <a href="../sui/bcs.md#sui_bcs_to_bytes">bcs::to_bytes</a>(value) } </code></pre> </details><a name="sui_bcs_new"></a>
newCreates a new instance of BCS wrapper that holds inversed bytes for better performance.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_new">new</a>(bytes: vector<u8>): <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_new">new</a>(<b>mut</b> bytes: vector<u8>): <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a> { bytes.reverse(); <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a> { bytes } } </code></pre> </details><a name="sui_bcs_into_remainder_bytes"></a>
into_remainder_bytesUnpack the <code><a href="../sui/bcs.md#sui_bcs_BCS">BCS</a></code> struct returning the leftover bytes. Useful for passing the data further after partial deserialization.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_into_remainder_bytes">into_remainder_bytes</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): vector<u8> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_into_remainder_bytes">into_remainder_bytes</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): vector<u8> { <b>let</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a> { <b>mut</b> bytes } = <a href="../sui/bcs.md#sui_bcs">bcs</a>; bytes.reverse(); bytes } </code></pre> </details><a name="sui_bcs_peel_address"></a>
peel_addressRead address from the bcs-serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_address">peel_address</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): <b>address</b> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_address">peel_address</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): <b>address</b> { <b>assert</b>!(<a href="../sui/bcs.md#sui_bcs">bcs</a>.bytes.length() >= <a href="../sui/address.md#sui_address_length">address::length</a>(), <a href="../sui/bcs.md#sui_bcs_EOutOfRange">EOutOfRange</a>); <a href="../sui/address.md#sui_address_from_bytes">address::from_bytes</a>(vector::tabulate!(<a href="../sui/address.md#sui_address_length">address::length</a>(), |_| <a href="../sui/bcs.md#sui_bcs">bcs</a>.bytes.pop_back())) } </code></pre> </details><a name="sui_bcs_peel_bool"></a>
peel_boolRead a <code>bool</code> value from bcs-serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_bool">peel_bool</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): bool </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_bool">peel_bool</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): bool { <b>let</b> value = <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_u8">peel_u8</a>(); <b>if</b> (value == 0) <b>false</b> <b>else</b> <b>if</b> (value == 1) <b>true</b> <b>else</b> <b>abort</b> <a href="../sui/bcs.md#sui_bcs_ENotBool">ENotBool</a> } </code></pre> </details><a name="sui_bcs_peel_u8"></a>
peel_u8Read <code>u8</code> value from bcs-serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_u8">peel_u8</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): u8 </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_u8">peel_u8</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): u8 { <b>assert</b>!(<a href="../sui/bcs.md#sui_bcs">bcs</a>.bytes.length() >= 1, <a href="../sui/bcs.md#sui_bcs_EOutOfRange">EOutOfRange</a>); <a href="../sui/bcs.md#sui_bcs">bcs</a>.bytes.pop_back() } </code></pre> </details><a name="sui_bcs_peel_num"></a>
peel_num<a name="sui_bcs_peel_u16"></a>
peel_u16Read <code>u16</code> value from bcs-serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_u16">peel_u16</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): u16 </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_u16">peel_u16</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): u16 { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_num">peel_num</a>!(2, 16u8) } </code></pre> </details><a name="sui_bcs_peel_u32"></a>
peel_u32Read <code>u32</code> value from bcs-serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_u32">peel_u32</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): u32 </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_u32">peel_u32</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): u32 { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_num">peel_num</a>!(4, 32u8) } </code></pre> </details><a name="sui_bcs_peel_u64"></a>
peel_u64Read <code>u64</code> value from bcs-serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_u64">peel_u64</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): u64 </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_u64">peel_u64</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): u64 { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_num">peel_num</a>!(8, 64u8) } </code></pre> </details><a name="sui_bcs_peel_u128"></a>
peel_u128Read <code>u128</code> value from bcs-serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_u128">peel_u128</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): u128 </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_u128">peel_u128</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): u128 { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_num">peel_num</a>!(16, 128u8) } </code></pre> </details><a name="sui_bcs_peel_u256"></a>
peel_u256Read <code>u256</code> value from bcs-serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_u256">peel_u256</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): u256 </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_u256">peel_u256</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): u256 { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_num">peel_num</a>!(32, 256u16) } </code></pre> </details><a name="sui_bcs_peel_vec_length"></a>
peel_vec_lengthRead ULEB bytes expecting a vector length. Result should then be used to perform <code>peel_*</code> operation LEN times.
In BCS <code>vector</code> length is implemented with ULEB128; See more here: https://en.wikipedia.org/wiki/LEB128
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_length">peel_vec_length</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): u64 </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_length">peel_vec_length</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): u64 { <b>let</b> (<b>mut</b> total, <b>mut</b> shift, <b>mut</b> len) = (0u64, 0u8, 0u64); <b>loop</b> { <b>assert</b>!(len <= 4, <a href="../sui/bcs.md#sui_bcs_ELenOutOfRange">ELenOutOfRange</a>); <b>let</b> byte = <a href="../sui/bcs.md#sui_bcs">bcs</a>.bytes.pop_back() <b>as</b> u64; len = len + 1; total = total | ((byte & 0x7f) << shift); <b>if</b> ((byte & 0x80) == 0) <b>break</b>; shift = shift + 7; }; total } </code></pre> </details><a name="sui_bcs_peel_vec"></a>
peel_vecPeel <code>vector<$T></code> from serialized bytes, where <code>$peel: |&<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>| -> $T</code> gives the functionality of peeling each value.
<pre><code><b>public</b> <b>macro</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec">peel_vec</a><$T>($<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>, $peel: |&<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>| -> $T): vector<$T> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>macro</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec">peel_vec</a><$T>($<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>, $peel: |&<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>| -> $T): vector<$T> { <b>let</b> <a href="../sui/bcs.md#sui_bcs">bcs</a> = $<a href="../sui/bcs.md#sui_bcs">bcs</a>; vector::tabulate!(<a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_vec_length">peel_vec_length</a>(), |_| $peel(<a href="../sui/bcs.md#sui_bcs">bcs</a>)) } </code></pre> </details><a name="sui_bcs_peel_vec_address"></a>
peel_vec_addressPeel a vector of <code><b>address</b></code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_address">peel_vec_address</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): vector<<b>address</b>> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_address">peel_vec_address</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): vector<<b>address</b>> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_vec">peel_vec</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_address">peel_address</a>()) } </code></pre> </details><a name="sui_bcs_peel_vec_bool"></a>
peel_vec_boolPeel a vector of <code><b>address</b></code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_bool">peel_vec_bool</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): vector<bool> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_bool">peel_vec_bool</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): vector<bool> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_vec">peel_vec</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_bool">peel_bool</a>()) } </code></pre> </details><a name="sui_bcs_peel_vec_u8"></a>
peel_vec_u8Peel a vector of <code>u8</code> (eg string) from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_u8">peel_vec_u8</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): vector<u8> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_u8">peel_vec_u8</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): vector<u8> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_vec">peel_vec</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_u8">peel_u8</a>()) } </code></pre> </details><a name="sui_bcs_peel_vec_vec_u8"></a>
peel_vec_vec_u8Peel a <code>vector<vector<u8>></code> (eg vec of string) from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_vec_u8">peel_vec_vec_u8</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): vector<vector<u8>> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_vec_u8">peel_vec_vec_u8</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): vector<vector<u8>> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_vec">peel_vec</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_vec_u8">peel_vec_u8</a>()) } </code></pre> </details><a name="sui_bcs_peel_vec_u16"></a>
peel_vec_u16Peel a vector of <code>u16</code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_u16">peel_vec_u16</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): vector<u16> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_u16">peel_vec_u16</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): vector<u16> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_vec">peel_vec</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_u16">peel_u16</a>()) } </code></pre> </details><a name="sui_bcs_peel_vec_u32"></a>
peel_vec_u32Peel a vector of <code>u32</code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_u32">peel_vec_u32</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): vector<u32> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_u32">peel_vec_u32</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): vector<u32> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_vec">peel_vec</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_u32">peel_u32</a>()) } </code></pre> </details><a name="sui_bcs_peel_vec_u64"></a>
peel_vec_u64Peel a vector of <code>u64</code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_u64">peel_vec_u64</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): vector<u64> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_u64">peel_vec_u64</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): vector<u64> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_vec">peel_vec</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_u64">peel_u64</a>()) } </code></pre> </details><a name="sui_bcs_peel_vec_u128"></a>
peel_vec_u128Peel a vector of <code>u128</code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_u128">peel_vec_u128</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): vector<u128> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_u128">peel_vec_u128</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): vector<u128> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_vec">peel_vec</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_u128">peel_u128</a>()) } </code></pre> </details><a name="sui_bcs_peel_vec_u256"></a>
peel_vec_u256Peel a vector of <code>u256</code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_u256">peel_vec_u256</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): vector<u256> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_vec_u256">peel_vec_u256</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): vector<u256> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_vec">peel_vec</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_u256">peel_u256</a>()) } </code></pre> </details><a name="sui_bcs_peel_enum_tag"></a>
peel_enum_tagPeel enum from serialized bytes, where <code>$f</code> takes a <code>tag</code> value and returns the corresponding enum variant. Move enums are limited to 127 variants, however the tag can be any <code>u32</code> value.
Example:
let my_enum = match (bcs.peel_enum_tag()) {
0 => Enum::Empty,
1 => Enum::U8(bcs.peel_u8()),
2 => Enum::U16(bcs.peel_u16()),
3 => Enum::Struct { a: bcs.peel_address(), b: bcs.peel_u8() },
_ => abort,
};
<a name="sui_bcs_peel_option"></a>
peel_optionPeel <code>Option<$T></code> from serialized bytes, where <code>$peel: |&<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>| -> $T</code> gives the functionality of peeling the inner value.
<pre><code><b>public</b> <b>macro</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option">peel_option</a><$T>($<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>, $peel: |&<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>| -> $T): <a href="../std/option.md#std_option_Option">std::option::Option</a><$T> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>macro</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option">peel_option</a><$T>($<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>, $peel: |&<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>| -> $T): Option<$T> { <b>let</b> <a href="../sui/bcs.md#sui_bcs">bcs</a> = $<a href="../sui/bcs.md#sui_bcs">bcs</a>; <b>if</b> (<a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_bool">peel_bool</a>()) option::some($peel(<a href="../sui/bcs.md#sui_bcs">bcs</a>)) <b>else</b> option::none() } </code></pre> </details><a name="sui_bcs_peel_option_address"></a>
peel_option_addressPeel <code>Option<<b>address</b>></code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_address">peel_option_address</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): <a href="../std/option.md#std_option_Option">std::option::Option</a><<b>address</b>> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_address">peel_option_address</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): Option<<b>address</b>> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_option">peel_option</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_address">peel_address</a>()) } </code></pre> </details><a name="sui_bcs_peel_option_bool"></a>
peel_option_boolPeel <code>Option<bool></code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_bool">peel_option_bool</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): <a href="../std/option.md#std_option_Option">std::option::Option</a><bool> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_bool">peel_option_bool</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): Option<bool> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_option">peel_option</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_bool">peel_bool</a>()) } </code></pre> </details><a name="sui_bcs_peel_option_u8"></a>
peel_option_u8Peel <code>Option<u8></code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_u8">peel_option_u8</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): <a href="../std/option.md#std_option_Option">std::option::Option</a><u8> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_u8">peel_option_u8</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): Option<u8> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_option">peel_option</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_u8">peel_u8</a>()) } </code></pre> </details><a name="sui_bcs_peel_option_u16"></a>
peel_option_u16Peel <code>Option<u16></code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_u16">peel_option_u16</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): <a href="../std/option.md#std_option_Option">std::option::Option</a><u16> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_u16">peel_option_u16</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): Option<u16> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_option">peel_option</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_u16">peel_u16</a>()) } </code></pre> </details><a name="sui_bcs_peel_option_u32"></a>
peel_option_u32Peel <code>Option<u32></code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_u32">peel_option_u32</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): <a href="../std/option.md#std_option_Option">std::option::Option</a><u32> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_u32">peel_option_u32</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): Option<u32> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_option">peel_option</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_u32">peel_u32</a>()) } </code></pre> </details><a name="sui_bcs_peel_option_u64"></a>
peel_option_u64Peel <code>Option<u64></code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_u64">peel_option_u64</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): <a href="../std/option.md#std_option_Option">std::option::Option</a><u64> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_u64">peel_option_u64</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): Option<u64> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_option">peel_option</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_u64">peel_u64</a>()) } </code></pre> </details><a name="sui_bcs_peel_option_u128"></a>
peel_option_u128Peel <code>Option<u128></code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_u128">peel_option_u128</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): <a href="../std/option.md#std_option_Option">std::option::Option</a><u128> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_u128">peel_option_u128</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): Option<u128> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_option">peel_option</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_u128">peel_u128</a>()) } </code></pre> </details><a name="sui_bcs_peel_option_u256"></a>
peel_option_u256Peel <code>Option<u256></code> from serialized bytes.
<pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_u256">peel_option_u256</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">sui::bcs::BCS</a>): <a href="../std/option.md#std_option_Option">std::option::Option</a><u256> </code></pre> <details> <summary>Implementation</summary> <pre><code><b>public</b> <b>fun</b> <a href="../sui/bcs.md#sui_bcs_peel_option_u256">peel_option_u256</a>(<a href="../sui/bcs.md#sui_bcs">bcs</a>: &<b>mut</b> <a href="../sui/bcs.md#sui_bcs_BCS">BCS</a>): Option<u256> { <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_option">peel_option</a>!(|<a href="../sui/bcs.md#sui_bcs">bcs</a>| <a href="../sui/bcs.md#sui_bcs">bcs</a>.<a href="../sui/bcs.md#sui_bcs_peel_u256">peel_u256</a>()) } </code></pre> </details>