fuel_core_client/client/schema/
upgrades.rs

1use crate::client::schema::schema;
2
3use crate::client::{
4    schema::{
5        chain::ConsensusParameters,
6        primitives::HexString,
7    },
8    ConversionError,
9};
10
11use fuel_core_types::fuel_vm::UploadedBytecode as VmUploadedBytecode;
12
13#[derive(cynic::QueryVariables, Debug)]
14pub struct ConsensusParametersByVersionArgs {
15    pub version: i32,
16}
17
18#[derive(cynic::QueryFragment, Clone, Debug)]
19#[cynic(
20    schema_path = "./assets/schema.sdl",
21    graphql_type = "Query",
22    variables = "ConsensusParametersByVersionArgs"
23)]
24pub struct ConsensusParametersByVersionQuery {
25    #[arguments(version: $version)]
26    pub consensus_parameters: Option<ConsensusParameters>,
27}
28
29#[derive(cynic::QueryVariables, Debug)]
30pub struct StateTransitionBytecodeByVersionArgs {
31    pub version: i32,
32}
33
34#[derive(cynic::QueryFragment, Clone, Debug)]
35#[cynic(
36    schema_path = "./assets/schema.sdl",
37    graphql_type = "Query",
38    variables = "StateTransitionBytecodeByVersionArgs"
39)]
40pub struct StateTransitionBytecodeByVersionQuery {
41    #[arguments(version: $version)]
42    pub state_transition_bytecode_by_version: Option<StateTransitionBytecode>,
43}
44
45#[derive(cynic::QueryVariables, Debug)]
46pub struct StateTransitionBytecodeByRootArgs {
47    pub root: HexString,
48}
49
50#[derive(cynic::QueryFragment, Clone, Debug)]
51#[cynic(
52    schema_path = "./assets/schema.sdl",
53    graphql_type = "Query",
54    variables = "StateTransitionBytecodeByRootArgs"
55)]
56pub struct StateTransitionBytecodeByRootQuery {
57    #[arguments(root: $root)]
58    pub state_transition_bytecode_by_root: Option<StateTransitionBytecode>,
59}
60
61#[derive(cynic::QueryFragment, Clone, Debug)]
62#[cynic(schema_path = "./assets/schema.sdl")]
63pub struct StateTransitionBytecode {
64    pub root: HexString,
65    pub bytecode: UploadedBytecode,
66}
67
68#[derive(cynic::QueryFragment, Clone, Debug)]
69#[cynic(schema_path = "./assets/schema.sdl")]
70pub struct UploadedBytecode {
71    pub bytecode: HexString,
72    pub uploaded_subsections_number: Option<i32>,
73    pub completed: bool,
74}
75
76// GrapqhQL translation
77
78impl TryFrom<UploadedBytecode> for VmUploadedBytecode {
79    type Error = ConversionError;
80    fn try_from(value: UploadedBytecode) -> Result<Self, Self::Error> {
81        Ok(match value.completed {
82            true => Self::Completed(value.bytecode.into()),
83            false => Self::Uncompleted {
84                bytecode: value.bytecode.into(),
85                uploaded_subsections_number: value
86                    .uploaded_subsections_number
87                    .ok_or_else(|| {
88                        ConversionError::MissingField(
89                            "uploaded_subsections_number".to_string(),
90                        )
91                    })?
92                    .try_into()?,
93            },
94        })
95    }
96}