rust_to_dtr 0.16.0

Convert Rust Soroban contracts to DTR format.
Documentation
use crate::common::compilation_state;
use crate::errors::not_translatable_error::NotTranslatableError;
use crate::instruction::Instruction;
use crate::translate::type_name::parse_path;
use std::vec;

pub fn handle_path_expression(
    path_expr: &syn::ExprPath,
    compilation_state: &mut compilation_state::CompilationState,
) -> Result<Vec<Instruction>, NotTranslatableError> {
    let path_string_value = parse_path(&path_expr.path.clone());

    let result_instruction: Vec<Instruction> = vec![Instruction::new(
        compilation_state.get_global_uuid(),
        "assign".to_string(),
        vec![path_string_value],
        compilation_state
            .next_assignment
            .clone()
            .unwrap_or_default(),
        compilation_state.scope(),
    )];

    Ok(result_instruction)
}

#[cfg(test)]
mod tests {
    use crate::common::compilation_state::CompilationState;
    use crate::instruction::Instruction;
    use crate::translate::expression::path_expression::handle_path_expression;
    use syn::{parse_quote, ExprPath};

    #[test]
    fn test_handle_path_expression() {
        let mut compilation_state = CompilationState::new();
        let expr: ExprPath = parse_quote! { Struct };
        let instructions = handle_path_expression(
            &expr,
            &mut compilation_state.with_assignment(Some("SomeAssignment".to_string())),
        )
        .unwrap();
        assert_eq!(
            instructions,
            vec![Instruction::new(
                0,
                "assign".to_string(),
                vec!["Struct".to_string()],
                "SomeAssignment".to_string(),
                0
            ),]
        );
    }
}