Skip to content

Commit

Permalink
refactored code
Browse files Browse the repository at this point in the history
  • Loading branch information
harshdoesdev committed Dec 11, 2023
1 parent 14a6f03 commit 71ee355
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 39 deletions.
78 changes: 39 additions & 39 deletions ftd/src/interpreter/things/expression.rs
Original file line number Diff line number Diff line change
Expand Up @@ -112,42 +112,35 @@ impl Expression {
for variable in variable_identifier_reads {
let full_variable_name =
doc.resolve_reference_name(format!("${}", variable.value).as_str(), line_number)?;
let value = try_ok_state!(
match ftd::interpreter::PropertyValue::from_string_with_argument(
full_variable_name.as_str(),
doc,
None,
false,
line_number,
definition_name_with_arguments,
loop_object_name_and_kind,
) {
Ok(v) =>
if let Some(infer_from) = variable.infer_from {
let infer_from_value = result.get(&infer_from.value).unwrap();

match v {
ftd::interpreter::StateWithThing::Thing(thing)
if infer_from_value.kind().inner().is_or_type() =>
{
if thing.kind().inner().eq(&infer_from_value.kind().inner()) {
ftd::interpreter::StateWithThing::new_thing(thing)
} else {
return ftd::interpreter::utils::e2(format!("Invalid value on the right-hand side. Expected \"{}\" but found \"{}\".", infer_from_value.kind().inner().get_name(), thing.kind().inner().get_name()), doc.name, line_number);
}
let value = try_ok_state!(match variable
.infer_from
.map(|infer_from| result.get(&infer_from.value).unwrap())
{
Some(infer_from_value) => {
match ftd::interpreter::PropertyValue::from_string_with_argument(
full_variable_name.as_str(),
doc,
None,
false,
line_number,
definition_name_with_arguments,
loop_object_name_and_kind,
) {
Ok(v) => match v {
ftd::interpreter::StateWithThing::Thing(thing)
if infer_from_value.kind().inner().is_or_type() =>
{
if thing.kind().inner().eq(&infer_from_value.kind().inner()) {
ftd::interpreter::StateWithThing::new_thing(thing)
} else {
return ftd::interpreter::utils::e2(format!("Invalid value on the right-hand side. Expected \"{}\" but found \"{}\".", infer_from_value.kind().inner().get_name(), thing.kind().inner().get_name()), doc.name, line_number);
}
t => t,
}
} else {
v
t => t,
},
Err(e) => {
if let Some(infer_from) = variable.infer_from {
let infer_from_value = result.get(&infer_from.value).unwrap();

if let ftd::interpreter::Kind::OrType { name, .. } =
infer_from_value.kind()
{
Err(e) => match infer_from_value.kind().get_or_type_name() {
Some(name) => {
let name = format!("${}.{}", name, variable.value);
let full_variable_name =
doc.resolve_reference_name(name.as_str(), line_number)?;
Expand All @@ -161,15 +154,22 @@ impl Expression {
definition_name_with_arguments,
loop_object_name_and_kind,
)
} else {
Err(e)
}
} else {
Err(e)
}
}?,
None => Err(e),
}?,
}
}
);
None => ftd::interpreter::PropertyValue::from_string_with_argument(
full_variable_name.as_str(),
doc,
None,
false,
line_number,
definition_name_with_arguments,
loop_object_name_and_kind,
)?,
});

ftd::interpreter::utils::insert_module_thing(
&value.kind().into_kind_data(),
variable.value.as_str(),
Expand Down
7 changes: 7 additions & 0 deletions ftd/src/interpreter/things/kind.rs
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,13 @@ impl Kind {
_ => None,
}
}

pub fn get_or_type_name(&self) -> Option<&str> {
match self {
ftd::interpreter::Kind::OrType { ref name, .. } => Some(name),
_ => None,
}
}
}

#[derive(Debug, Clone, PartialEq, serde::Deserialize, serde::Serialize)]
Expand Down

0 comments on commit 71ee355

Please sign in to comment.