Instruction

Enum Instruction 

Source
pub enum Instruction {
Show 156 variants Lui { dest: IRegister, imm: UImmediate, }, Auipc { dest: IRegister, imm: UImmediate, }, Jal { dest: IRegister, offset: JImmediate, }, Jalr { dest: IRegister, base: IRegister, offset: IImmediate, }, Beq { src1: IRegister, src2: IRegister, offset: BImmediate, }, Bne { src1: IRegister, src2: IRegister, offset: BImmediate, }, Blt { src1: IRegister, src2: IRegister, offset: BImmediate, }, Bge { src1: IRegister, src2: IRegister, offset: BImmediate, }, Bltu { src1: IRegister, src2: IRegister, offset: BImmediate, }, Bgeu { src1: IRegister, src2: IRegister, offset: BImmediate, }, Lb { dest: IRegister, base: IRegister, offset: IImmediate, }, Lh { dest: IRegister, base: IRegister, offset: IImmediate, }, Lw { dest: IRegister, base: IRegister, offset: IImmediate, }, Lbu { dest: IRegister, base: IRegister, offset: IImmediate, }, Lhu { dest: IRegister, base: IRegister, offset: IImmediate, }, Sb { src: IRegister, base: IRegister, offset: SImmediate, }, Sh { src: IRegister, base: IRegister, offset: SImmediate, }, Sw { src: IRegister, base: IRegister, offset: SImmediate, }, Addi { dest: IRegister, src: IRegister, imm: IImmediate, }, Slti { dest: IRegister, src: IRegister, imm: IImmediate, }, Sltiu { dest: IRegister, src: IRegister, imm: IImmediate, }, Xori { dest: IRegister, src: IRegister, imm: IImmediate, }, Ori { dest: IRegister, src: IRegister, imm: IImmediate, }, Andi { dest: IRegister, src: IRegister, imm: IImmediate, }, Slli { dest: IRegister, src: IRegister, shamt: Shamt, }, Srli { dest: IRegister, src: IRegister, shamt: Shamt, }, Srai { dest: IRegister, src: IRegister, shamt: Shamt, }, Add { dest: IRegister, src1: IRegister, src2: IRegister, }, Sub { dest: IRegister, src1: IRegister, src2: IRegister, }, Sll { dest: IRegister, src1: IRegister, src2: IRegister, }, Slt { dest: IRegister, src1: IRegister, src2: IRegister, }, Sltu { dest: IRegister, src1: IRegister, src2: IRegister, }, Xor { dest: IRegister, src1: IRegister, src2: IRegister, }, Srl { dest: IRegister, src1: IRegister, src2: IRegister, }, Sra { dest: IRegister, src1: IRegister, src2: IRegister, }, Or { dest: IRegister, src1: IRegister, src2: IRegister, }, And { dest: IRegister, src1: IRegister, src2: IRegister, }, Fence { rd: IRegister, rs1: IRegister, ops: u8, fm: u8, }, Ecall, Ebreak, Lwu { dest: IRegister, base: IRegister, offset: IImmediate, }, Ld { dest: IRegister, base: IRegister, offset: IImmediate, }, Sd { src: IRegister, base: IRegister, offset: SImmediate, }, Addiw { dest: IRegister, src: IRegister, imm: IImmediate, }, Slliw { dest: IRegister, src: IRegister, shamt: ShamtW, }, Srliw { dest: IRegister, src: IRegister, shamt: ShamtW, }, Sraiw { dest: IRegister, src: IRegister, shamt: ShamtW, }, Addw { dest: IRegister, src1: IRegister, src2: IRegister, }, Subw { dest: IRegister, src1: IRegister, src2: IRegister, }, Sllw { dest: IRegister, src1: IRegister, src2: IRegister, }, Srlw { dest: IRegister, src1: IRegister, src2: IRegister, }, Sraw { dest: IRegister, src1: IRegister, src2: IRegister, }, Mul { dest: IRegister, src1: IRegister, src2: IRegister, }, Mulh { dest: IRegister, src1: IRegister, src2: IRegister, }, Mulhsu { dest: IRegister, src1: IRegister, src2: IRegister, }, Mulhu { dest: IRegister, src1: IRegister, src2: IRegister, }, Div { dest: IRegister, src1: IRegister, src2: IRegister, }, Divu { dest: IRegister, src1: IRegister, src2: IRegister, }, Rem { dest: IRegister, src1: IRegister, src2: IRegister, }, Remu { dest: IRegister, src1: IRegister, src2: IRegister, }, Mulw { dest: IRegister, src1: IRegister, src2: IRegister, }, Divw { dest: IRegister, src1: IRegister, src2: IRegister, }, Divuw { dest: IRegister, src1: IRegister, src2: IRegister, }, Remw { dest: IRegister, src1: IRegister, src2: IRegister, }, Remuw { dest: IRegister, src1: IRegister, src2: IRegister, }, LrW { dest: IRegister, addr: IRegister, aq: bool, rl: bool, }, ScW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmoswapW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmoaddW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmoxorW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmoandW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmoorW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmominW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmomaxW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmominuW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmomaxuW { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, LrD { dest: IRegister, addr: IRegister, aq: bool, rl: bool, }, ScD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmoswapD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmoaddD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmoxorD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmoandD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmoorD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmominD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmomaxD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmominuD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, AmomaxuD { dest: IRegister, addr: IRegister, src: IRegister, aq: bool, rl: bool, }, Flw { dest: FRegister, base: IRegister, offset: IImmediate, }, Fsw { base: IRegister, src: FRegister, offset: SImmediate, }, FmaddS { dest: FRegister, src1: FRegister, src2: FRegister, src3: FRegister, rm: RoundingMode, }, FmsubS { dest: FRegister, src1: FRegister, src2: FRegister, src3: FRegister, rm: RoundingMode, }, FnmsubS { dest: FRegister, src1: FRegister, src2: FRegister, src3: FRegister, rm: RoundingMode, }, FnmaddS { dest: FRegister, src1: FRegister, src2: FRegister, src3: FRegister, rm: RoundingMode, }, FaddS { dest: FRegister, src1: FRegister, src2: FRegister, rm: RoundingMode, }, FsubS { dest: FRegister, src1: FRegister, src2: FRegister, rm: RoundingMode, }, FmulS { dest: FRegister, src1: FRegister, src2: FRegister, rm: RoundingMode, }, FdivS { dest: FRegister, src1: FRegister, src2: FRegister, rm: RoundingMode, }, FsqrtS { dest: FRegister, src: FRegister, rm: RoundingMode, }, FsgnjS { dest: FRegister, src1: FRegister, src2: FRegister, }, FsgnjnS { dest: FRegister, src1: FRegister, src2: FRegister, }, FsgnjxS { dest: FRegister, src1: FRegister, src2: FRegister, }, FminS { dest: FRegister, src1: FRegister, src2: FRegister, }, FmaxS { dest: FRegister, src1: FRegister, src2: FRegister, }, FcvtWS { dest: IRegister, src: FRegister, rm: RoundingMode, }, FcvtWuS { dest: IRegister, src: FRegister, rm: RoundingMode, }, FmvXW { dest: IRegister, src: FRegister, }, FeqS { dest: IRegister, src1: FRegister, src2: FRegister, }, FltS { dest: IRegister, src1: FRegister, src2: FRegister, }, FleS { dest: IRegister, src1: FRegister, src2: FRegister, }, FclassS { dest: IRegister, src: FRegister, }, FcvtSW { dest: FRegister, src: IRegister, rm: RoundingMode, }, FcvtSWu { dest: FRegister, src: IRegister, rm: RoundingMode, }, FmvWX { dest: FRegister, src: IRegister, }, FcvtLS { dest: IRegister, src: FRegister, rm: RoundingMode, }, FcvtLuS { dest: IRegister, src: FRegister, rm: RoundingMode, }, FcvtSL { dest: FRegister, src: IRegister, rm: RoundingMode, }, FcvtSLu { dest: FRegister, src: IRegister, rm: RoundingMode, }, Csrrw { dest: IRegister, src: IRegister, csr: CSR, }, Csrrs { dest: IRegister, src: IRegister, csr: CSR, }, Csrrc { dest: IRegister, src: IRegister, csr: CSR, }, Csrrwi { dest: IRegister, imm: CSRImmediate, csr: CSR, }, Csrrsi { dest: IRegister, imm: CSRImmediate, csr: CSR, }, Csrrci { dest: IRegister, imm: CSRImmediate, csr: CSR, }, FenceI, Fld { dest: FRegister, base: IRegister, offset: IImmediate, }, Fsd { src: FRegister, base: IRegister, offset: SImmediate, }, FmaddD { dest: FRegister, src1: FRegister, src2: FRegister, src3: FRegister, rm: RoundingMode, }, FmsubD { dest: FRegister, src1: FRegister, src2: FRegister, src3: FRegister, rm: RoundingMode, }, FnmaddD { dest: FRegister, src1: FRegister, src2: FRegister, src3: FRegister, rm: RoundingMode, }, FnmsubD { dest: FRegister, src1: FRegister, src2: FRegister, src3: FRegister, rm: RoundingMode, }, FaddD { dest: FRegister, src1: FRegister, src2: FRegister, rm: RoundingMode, }, FsubD { dest: FRegister, src1: FRegister, src2: FRegister, rm: RoundingMode, }, FmulD { dest: FRegister, src1: FRegister, src2: FRegister, rm: RoundingMode, }, FdivD { dest: FRegister, src1: FRegister, src2: FRegister, rm: RoundingMode, }, FsqrtD { dest: FRegister, src: FRegister, rm: RoundingMode, }, FsgnjD { dest: FRegister, src1: FRegister, src2: FRegister, }, FsgnjnD { dest: FRegister, src1: FRegister, src2: FRegister, }, FsgnjxD { dest: FRegister, src1: FRegister, src2: FRegister, }, FminD { dest: FRegister, src1: FRegister, src2: FRegister, }, FmaxD { dest: FRegister, src1: FRegister, src2: FRegister, }, FcvtSD { dest: FRegister, src: FRegister, rm: RoundingMode, }, FcvtDS { dest: FRegister, src: FRegister, rm: RoundingMode, }, FeqD { dest: IRegister, src1: FRegister, src2: FRegister, }, FltD { dest: IRegister, src1: FRegister, src2: FRegister, }, FleD { dest: IRegister, src1: FRegister, src2: FRegister, }, FclassD { dest: IRegister, src1: FRegister, }, FcvtWD { dest: IRegister, src1: FRegister, rm: RoundingMode, }, FcvtWuD { dest: IRegister, src1: FRegister, rm: RoundingMode, }, FcvtDW { dest: FRegister, src1: IRegister, rm: RoundingMode, }, FcvtDWu { dest: FRegister, src1: IRegister, rm: RoundingMode, }, FcvtLD { dest: IRegister, src1: FRegister, rm: RoundingMode, }, FcvtLuD { dest: IRegister, src1: FRegister, rm: RoundingMode, }, FmvXD { dest: IRegister, src: FRegister, }, FcvtDL { dest: FRegister, src: IRegister, rm: RoundingMode, }, FcvtDLu { dest: FRegister, src: IRegister, rm: RoundingMode, }, FmvDX { dest: FRegister, src: IRegister, },
}

Variants§

§

Lui

Load upper immediate

Fields

§

Auipc

Add upper immediate to PC

Fields

§

Jal

Jump and Link

Fields

§offset: JImmediate
§

Jalr

Jump and Link Register

Fields

§offset: IImmediate
§

Beq

Fields

§offset: BImmediate
§

Bne

Fields

§offset: BImmediate
§

Blt

Fields

§offset: BImmediate
§

Bge

Fields

§offset: BImmediate
§

Bltu

Fields

§offset: BImmediate
§

Bgeu

Fields

§offset: BImmediate
§

Lb

Load Byte

Fields

§offset: IImmediate
§

Lh

Load Halfword

Fields

§offset: IImmediate
§

Lw

Load Word

Fields

§offset: IImmediate
§

Lbu

Load Byte Unsigned

Fields

§offset: IImmediate
§

Lhu

Load Halfword Unsigned

Fields

§offset: IImmediate
§

Sb

Store Byte

Fields

§offset: SImmediate
§

Sh

Store Halfword

Fields

§offset: SImmediate
§

Sw

Store Word

Fields

§offset: SImmediate
§

Addi

§

Slti

§

Sltiu

§

Xori

§

Ori

§

Andi

§

Slli

Left Shift Immediate

Fields

§shamt: Shamt
§

Srli

Logical Right Shift Immediate

Fields

§shamt: Shamt
§

Srai

Arithmetic Right Shift Immediate

Fields

§shamt: Shamt
§

Add

Fields

§

Sub

Fields

§

Sll

Left Shift

Fields

§

Slt

Fields

§

Sltu

Fields

§

Xor

Fields

§

Srl

Logical Right Shift Immediate

Fields

§

Sra

Arithmetic Right Shift Immediate

Fields

§

Or

Fields

§

And

Fields

§

Fence

Fields

§ops: u8
§fm: u8
§

Ecall

§

Ebreak

§

Lwu

Load Word Unsigned

Fields

§offset: IImmediate
§

Ld

Load Doubleword

Fields

§offset: IImmediate
§

Sd

Store Doubleword

Fields

§offset: SImmediate
§

Addiw

Add Immediate (word)

§

Slliw

Left Shift Immediate (word)

Fields

§shamt: ShamtW
§

Srliw

Logical Right Shift Immediate (word)

Fields

§shamt: ShamtW
§

Sraiw

Arithmetic Right Shift Immediate (word)

Fields

§shamt: ShamtW
§

Addw

Add (word)

Fields

§

Subw

Subtract (word)

Fields

§

Sllw

Left Shift (word)

Fields

§

Srlw

Logical Right Shift (word)

Fields

§

Sraw

Arithmetic Right Shift (word)

Fields

§

Mul

Multiply

Fields

§

Mulh

Multiply (High bits)

Fields

§

Mulhsu

Multiply Signed-Unsigned (High bits)

Fields

§

Mulhu

Multiply Unsigned (High)

Fields

§

Div

Divide

Fields

§

Divu

Divide (Unsigned)

Fields

§

Rem

Remainder

Fields

§

Remu

Remainder (Unsigned)

Fields

§

Mulw

Multiply Word

Fields

§

Divw

Divide Word

Fields

§

Divuw

Divide Unsigned Word

Fields

§

Remw

Remainder Word

Fields

§

Remuw

Remainder Unsigned Word

Fields

§

LrW

Load Reserved Word

Fields

§aq: bool
§rl: bool
§

ScW

Fields

§aq: bool
§rl: bool
§

AmoswapW

Fields

§aq: bool
§rl: bool
§

AmoaddW

Fields

§aq: bool
§rl: bool
§

AmoxorW

Fields

§aq: bool
§rl: bool
§

AmoandW

Fields

§aq: bool
§rl: bool
§

AmoorW

Fields

§aq: bool
§rl: bool
§

AmominW

Fields

§aq: bool
§rl: bool
§

AmomaxW

Fields

§aq: bool
§rl: bool
§

AmominuW

Fields

§aq: bool
§rl: bool
§

AmomaxuW

Fields

§aq: bool
§rl: bool
§

LrD

Fields

§aq: bool
§rl: bool
§

ScD

Fields

§aq: bool
§rl: bool
§

AmoswapD

Fields

§aq: bool
§rl: bool
§

AmoaddD

Fields

§aq: bool
§rl: bool
§

AmoxorD

Fields

§aq: bool
§rl: bool
§

AmoandD

Fields

§aq: bool
§rl: bool
§

AmoorD

Fields

§aq: bool
§rl: bool
§

AmominD

Fields

§aq: bool
§rl: bool
§

AmomaxD

Fields

§aq: bool
§rl: bool
§

AmominuD

Fields

§aq: bool
§rl: bool
§

AmomaxuD

Fields

§aq: bool
§rl: bool
§

Flw

Fields

§offset: IImmediate
§

Fsw

Fields

§offset: SImmediate
§

FmaddS

§

FmsubS

§

FnmsubS

§

FnmaddS

§

FaddS

§

FsubS

§

FmulS

§

FdivS

§

FsqrtS

§

FsgnjS

Fields

§

FsgnjnS

Fields

§

FsgnjxS

Fields

§

FminS

Fields

§

FmaxS

Fields

§

FcvtWS

§

FcvtWuS

§

FmvXW

Fields

§

FeqS

Fields

§

FltS

Fields

§

FleS

Fields

§

FclassS

Fields

§

FcvtSW

§

FcvtSWu

§

FmvWX

Fields

§

FcvtLS

§

FcvtLuS

§

FcvtSL

§

FcvtSLu

§

Csrrw

Fields

§csr: CSR
§

Csrrs

Fields

§csr: CSR
§

Csrrc

Fields

§csr: CSR
§

Csrrwi

Fields

§csr: CSR
§

Csrrsi

Fields

§csr: CSR
§

Csrrci

Fields

§csr: CSR
§

FenceI

§

Fld

Fields

§offset: IImmediate
§

Fsd

Fields

§offset: SImmediate
§

FmaddD

§

FmsubD

§

FnmaddD

§

FnmsubD

§

FaddD

§

FsubD

§

FmulD

§

FdivD

§

FsqrtD

§

FsgnjD

Fields

§

FsgnjnD

Fields

§

FsgnjxD

Fields

§

FminD

Fields

§

FmaxD

Fields

§

FcvtSD

§

FcvtDS

§

FeqD

Fields

§

FltD

Fields

§

FleD

Fields

§

FclassD

Fields

§

FcvtWD

§

FcvtWuD

§

FcvtDW

§

FcvtDWu

§

FcvtLD

§

FcvtLuD

§

FmvXD

Fields

§

FcvtDL

§

FcvtDLu

§

FmvDX

Fields

Implementations§

Source§

impl Instruction

Source

pub fn decode(instruction: u32) -> Result<Instruction, String>

Constructs an Instruction from it’s machine code representation.

Examples found in repository?
examples/simple.rs (line 9)
2fn main() {
3    // instruction can be assembled from strings
4    let instr: Instruction = assemble_line("addi t0, t1, 1024").unwrap().i();
5    // and disassembled
6    println!("assembled instruction: {}", instr);
7
8    // instructions can also be decoded from binary
9    let instr2 = Instruction::decode(0xe0058513).unwrap();
10
11    // and encoded
12    assert_eq!(Instruction::encode(&instr2), 0xe0058513);
13
14    let instr2 = assemble_line("fcvt.lu.s zero,ft0,rne").unwrap().i();
15    println!("assembled instruction: {}", instr2);
16}
More examples
Hide additional examples
examples/all-u32.rs (line 10)
4fn main() {
5    let mut valid: u32 = 0;
6    for x in 0..u32::MAX {
7        if x % 10000 == 0 {
8            println!("{:.4}%", 100.0 * (x as f64) / (u32::MAX as f64))
9        }
10        if let Ok(i) = Instruction::decode(x) {
11            valid += 1;
12            let e = Instruction::encode(&i);
13            if x != e {
14                println!("i: {i}\nx: {x:032b}\ne: {e:032b}");
15                exit(1);
16            }
17
18            let d = i.to_string();
19            let i2 = assemble_line(&d).unwrap().i();
20            if i != i2 {
21                println!("disassembled {i:#?} to get {d}. Assembled to get {i2:#?}!");
22                exit(1);
23            }
24        }
25    }
26    println!("Done.");
27    println!("proportion of encoding space used: {}%", 100.0 * (valid as f64) / (u32::MAX as f64))
28}
Source

pub fn encode(instruction: &Instruction) -> u32

Examples found in repository?
examples/simple.rs (line 12)
2fn main() {
3    // instruction can be assembled from strings
4    let instr: Instruction = assemble_line("addi t0, t1, 1024").unwrap().i();
5    // and disassembled
6    println!("assembled instruction: {}", instr);
7
8    // instructions can also be decoded from binary
9    let instr2 = Instruction::decode(0xe0058513).unwrap();
10
11    // and encoded
12    assert_eq!(Instruction::encode(&instr2), 0xe0058513);
13
14    let instr2 = assemble_line("fcvt.lu.s zero,ft0,rne").unwrap().i();
15    println!("assembled instruction: {}", instr2);
16}
More examples
Hide additional examples
examples/all-u32.rs (line 12)
4fn main() {
5    let mut valid: u32 = 0;
6    for x in 0..u32::MAX {
7        if x % 10000 == 0 {
8            println!("{:.4}%", 100.0 * (x as f64) / (u32::MAX as f64))
9        }
10        if let Ok(i) = Instruction::decode(x) {
11            valid += 1;
12            let e = Instruction::encode(&i);
13            if x != e {
14                println!("i: {i}\nx: {x:032b}\ne: {e:032b}");
15                exit(1);
16            }
17
18            let d = i.to_string();
19            let i2 = assemble_line(&d).unwrap().i();
20            if i != i2 {
21                println!("disassembled {i:#?} to get {d}. Assembled to get {i2:#?}!");
22                exit(1);
23            }
24        }
25    }
26    println!("Done.");
27    println!("proportion of encoding space used: {}%", 100.0 * (valid as f64) / (u32::MAX as f64))
28}

Trait Implementations§

Source§

impl Debug for Instruction

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Instruction

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Instruction

Source§

fn eq(&self, other: &Instruction) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Instruction

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.