From 3be75addf8c56e2bc6491cb67057b99b709d0277 Mon Sep 17 00:00:00 2001 From: Collins Muriuki Date: Wed, 3 Jan 2024 16:24:23 +0300 Subject: [PATCH 1/3] Handle error creating linked action/entry hash without previous entry-types existing --- src/cli.rs | 2 +- src/scaffold/entry_type/fields.rs | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 5d8143bdd..f333fadd2 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -559,7 +559,7 @@ Add new entry definitions to your zome with: let file_tree = load_directory_into_memory(¤t_dir)?; let template_file_tree = choose_or_get_template_file_tree(&file_tree, &template)?; - let name: String = match name { + let name = match name { Some(n) => { check_case(&n, "entry type name", Case::Snake)?; n diff --git a/src/scaffold/entry_type/fields.rs b/src/scaffold/entry_type/fields.rs index 329647a0a..8eed94956 100644 --- a/src/scaffold/entry_type/fields.rs +++ b/src/scaffold/entry_type/fields.rs @@ -5,7 +5,7 @@ use dialoguer::{theme::ColorfulTheme, Confirm, Select}; use regex::Regex; use crate::{ - error::ScaffoldResult, + error::{ScaffoldError, ScaffoldResult}, file_tree::{dir_content, FileTree}, scaffold::zome::ZomeFileTree, utils::{check_case, input_with_case, input_with_case_and_initial_text}, @@ -247,7 +247,22 @@ pub fn choose_field( match link_from { false => None, true => { - let all_entry_types = get_all_entry_types(zome_file_tree)?.unwrap_or(vec![]); + let all_entry_types = get_all_entry_types(zome_file_tree)? + .ok_or(ScaffoldError::NoEntryTypesDefFoundForIntegrityZome( + zome_file_tree.dna_file_tree.dna_manifest.name(), + zome_file_tree.zome_manifest.name.to_string(), + )) + .and_then(|v| { + if v.is_empty() { + Err(ScaffoldError::NoEntryTypesDefFoundForIntegrityZome( + zome_file_tree.dna_file_tree.dna_manifest.name(), + zome_file_tree.zome_manifest.name.to_string(), + )) + } else { + Ok(v) + } + })?; + let mut all_options: Vec = all_entry_types .clone() .into_iter() From 81090400aa2cfda5bc7abea4e5d400ae00848f7c Mon Sep 17 00:00:00 2001 From: Collins Muriuki Date: Thu, 4 Jan 2024 17:39:36 +0300 Subject: [PATCH 2/3] Allow self referencing if selected type is Option of or Vec of action or entry type --- src/file_tree.rs | 2 +- src/scaffold/app.rs | 1 + src/scaffold/entry_type/fields.rs | 23 ++++++++--------------- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/file_tree.rs b/src/file_tree.rs index 0b0d2a243..4b4854e24 100644 --- a/src/file_tree.rs +++ b/src/file_tree.rs @@ -119,7 +119,7 @@ pub fn insert_file_tree_in_dir( } pub fn find_files_by_name(file_tree: &FileTree, file_name: &PathBuf) -> BTreeMap { - find_files(file_tree, &|file_path, _file_contents| { + find_files(file_tree, &|file_path, _| { file_name.file_name().eq(&file_path.file_name()) }) } diff --git a/src/scaffold/app.rs b/src/scaffold/app.rs index 9bda3f1aa..8a987bb06 100644 --- a/src/scaffold/app.rs +++ b/src/scaffold/app.rs @@ -25,6 +25,7 @@ impl AppFileTree { pub fn file_tree(self) -> FileTree { self.file_tree } + pub fn file_tree_ref<'a>(&'a self) -> &'a FileTree { &self.file_tree } diff --git a/src/scaffold/entry_type/fields.rs b/src/scaffold/entry_type/fields.rs index 8eed94956..c6c30d058 100644 --- a/src/scaffold/entry_type/fields.rs +++ b/src/scaffold/entry_type/fields.rs @@ -247,21 +247,7 @@ pub fn choose_field( match link_from { false => None, true => { - let all_entry_types = get_all_entry_types(zome_file_tree)? - .ok_or(ScaffoldError::NoEntryTypesDefFoundForIntegrityZome( - zome_file_tree.dna_file_tree.dna_manifest.name(), - zome_file_tree.zome_manifest.name.to_string(), - )) - .and_then(|v| { - if v.is_empty() { - Err(ScaffoldError::NoEntryTypesDefFoundForIntegrityZome( - zome_file_tree.dna_file_tree.dna_manifest.name(), - zome_file_tree.zome_manifest.name.to_string(), - )) - } else { - Ok(v) - } - })?; + let all_entry_types = get_all_entry_types(zome_file_tree)?.unwrap_or(vec![]); let mut all_options: Vec = all_entry_types .clone() @@ -276,6 +262,13 @@ pub fn choose_field( )); } + if all_options.is_empty() { + return Err(ScaffoldError::NoEntryTypesDefFoundForIntegrityZome( + zome_file_tree.dna_file_tree.dna_manifest.name(), + zome_file_tree.zome_manifest.name.to_string(), + )) + } + let selection = Select::with_theme(&ColorfulTheme::default()) .with_prompt(String::from("Which entry type is this field referring to?")) .default(0) From 4b0092c1ecb94e327d4ab8f4b02c53d94cb4f184 Mon Sep 17 00:00:00 2001 From: Collins Muriuki Date: Thu, 4 Jan 2024 17:41:20 +0300 Subject: [PATCH 3/3] Revert unrelated changes --- src/file_tree.rs | 2 +- src/scaffold/entry_type/fields.rs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/file_tree.rs b/src/file_tree.rs index 4b4854e24..0b0d2a243 100644 --- a/src/file_tree.rs +++ b/src/file_tree.rs @@ -119,7 +119,7 @@ pub fn insert_file_tree_in_dir( } pub fn find_files_by_name(file_tree: &FileTree, file_name: &PathBuf) -> BTreeMap { - find_files(file_tree, &|file_path, _| { + find_files(file_tree, &|file_path, _file_contents| { file_name.file_name().eq(&file_path.file_name()) }) } diff --git a/src/scaffold/entry_type/fields.rs b/src/scaffold/entry_type/fields.rs index c6c30d058..c6fe8e58c 100644 --- a/src/scaffold/entry_type/fields.rs +++ b/src/scaffold/entry_type/fields.rs @@ -248,7 +248,6 @@ pub fn choose_field( false => None, true => { let all_entry_types = get_all_entry_types(zome_file_tree)?.unwrap_or(vec![]); - let mut all_options: Vec = all_entry_types .clone() .into_iter()