Skip to content

Commit 3d1587c

Browse files
committed
style: cargo fmt
1 parent d41c127 commit 3d1587c

4 files changed

Lines changed: 95 additions & 31 deletions

File tree

src/http.rs

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,9 @@ async fn handle_create(
699699
) -> Result<impl IntoResponse, ApiError> {
700700
authorize(&headers, &state, true)?;
701701
if state.read_only {
702-
return Err(ApiError::forbidden("Write operations disabled in read-only mode"));
702+
return Err(ApiError::forbidden(
703+
"Write operations disabled in read-only mode",
704+
));
703705
}
704706
let store = state.store.lock().await;
705707
let mut embedder = state.embedder.lock().await;
@@ -731,7 +733,9 @@ async fn handle_append(
731733
) -> Result<impl IntoResponse, ApiError> {
732734
authorize(&headers, &state, true)?;
733735
if state.read_only {
734-
return Err(ApiError::forbidden("Write operations disabled in read-only mode"));
736+
return Err(ApiError::forbidden(
737+
"Write operations disabled in read-only mode",
738+
));
735739
}
736740
let store = state.store.lock().await;
737741
let mut embedder = state.embedder.lock().await;
@@ -754,7 +758,9 @@ async fn handle_edit(
754758
) -> Result<impl IntoResponse, ApiError> {
755759
authorize(&headers, &state, true)?;
756760
if state.read_only {
757-
return Err(ApiError::forbidden("Write operations disabled in read-only mode"));
761+
return Err(ApiError::forbidden(
762+
"Write operations disabled in read-only mode",
763+
));
758764
}
759765
let store = state.store.lock().await;
760766
let mode = match body.mode.as_deref().unwrap_or("append") {
@@ -783,7 +789,9 @@ async fn handle_rewrite(
783789
) -> Result<impl IntoResponse, ApiError> {
784790
authorize(&headers, &state, true)?;
785791
if state.read_only {
786-
return Err(ApiError::forbidden("Write operations disabled in read-only mode"));
792+
return Err(ApiError::forbidden(
793+
"Write operations disabled in read-only mode",
794+
));
787795
}
788796
let store = state.store.lock().await;
789797
let input = RewriteInput {
@@ -806,7 +814,9 @@ async fn handle_edit_frontmatter(
806814
) -> Result<impl IntoResponse, ApiError> {
807815
authorize(&headers, &state, true)?;
808816
if state.read_only {
809-
return Err(ApiError::forbidden("Write operations disabled in read-only mode"));
817+
return Err(ApiError::forbidden(
818+
"Write operations disabled in read-only mode",
819+
));
810820
}
811821
let ops = parse_frontmatter_ops(&body.operations)?;
812822
let store = state.store.lock().await;
@@ -829,7 +839,9 @@ async fn handle_move(
829839
) -> Result<impl IntoResponse, ApiError> {
830840
authorize(&headers, &state, true)?;
831841
if state.read_only {
832-
return Err(ApiError::forbidden("Write operations disabled in read-only mode"));
842+
return Err(ApiError::forbidden(
843+
"Write operations disabled in read-only mode",
844+
));
833845
}
834846
let store = state.store.lock().await;
835847
let result = writer::move_note(&body.file, &body.new_folder, &store, &state.vault_path)
@@ -846,7 +858,9 @@ async fn handle_archive(
846858
) -> Result<impl IntoResponse, ApiError> {
847859
authorize(&headers, &state, true)?;
848860
if state.read_only {
849-
return Err(ApiError::forbidden("Write operations disabled in read-only mode"));
861+
return Err(ApiError::forbidden(
862+
"Write operations disabled in read-only mode",
863+
));
850864
}
851865
let store = state.store.lock().await;
852866
let result = writer::archive_note(
@@ -868,7 +882,9 @@ async fn handle_unarchive(
868882
) -> Result<impl IntoResponse, ApiError> {
869883
authorize(&headers, &state, true)?;
870884
if state.read_only {
871-
return Err(ApiError::forbidden("Write operations disabled in read-only mode"));
885+
return Err(ApiError::forbidden(
886+
"Write operations disabled in read-only mode",
887+
));
872888
}
873889
let store = state.store.lock().await;
874890
let mut embedder = state.embedder.lock().await;
@@ -886,7 +902,9 @@ async fn handle_update_metadata(
886902
) -> Result<impl IntoResponse, ApiError> {
887903
authorize(&headers, &state, true)?;
888904
if state.read_only {
889-
return Err(ApiError::forbidden("Write operations disabled in read-only mode"));
905+
return Err(ApiError::forbidden(
906+
"Write operations disabled in read-only mode",
907+
));
890908
}
891909
let store = state.store.lock().await;
892910
let input = UpdateMetadataInput {
@@ -912,7 +930,9 @@ async fn handle_migrate_preview(
912930
) -> Result<impl IntoResponse, ApiError> {
913931
authorize(&headers, &state, true)?;
914932
if state.read_only {
915-
return Err(ApiError::forbidden("Write operations disabled in read-only mode"));
933+
return Err(ApiError::forbidden(
934+
"Write operations disabled in read-only mode",
935+
));
916936
}
917937
let store = state.store.lock().await;
918938
let profile_ref = state.profile.as_ref().as_ref();
@@ -933,7 +953,9 @@ async fn handle_migrate_apply(
933953
) -> Result<impl IntoResponse, ApiError> {
934954
authorize(&headers, &state, true)?;
935955
if state.read_only {
936-
return Err(ApiError::forbidden("Write operations disabled in read-only mode"));
956+
return Err(ApiError::forbidden(
957+
"Write operations disabled in read-only mode",
958+
));
937959
}
938960
let store = state.store.lock().await;
939961
let preview: crate::migrate::MigrationPreview = serde_json::from_value(body.preview)
@@ -949,7 +971,9 @@ async fn handle_migrate_undo(
949971
) -> Result<impl IntoResponse, ApiError> {
950972
authorize(&headers, &state, true)?;
951973
if state.read_only {
952-
return Err(ApiError::forbidden("Write operations disabled in read-only mode"));
974+
return Err(ApiError::forbidden(
975+
"Write operations disabled in read-only mode",
976+
));
953977
}
954978
let store = state.store.lock().await;
955979
let result = crate::migrate::undo_last(&store, &state.vault_path)
@@ -964,7 +988,9 @@ async fn handle_delete(
964988
) -> Result<impl IntoResponse, ApiError> {
965989
authorize(&headers, &state, true)?;
966990
if state.read_only {
967-
return Err(ApiError::forbidden("Write operations disabled in read-only mode"));
991+
return Err(ApiError::forbidden(
992+
"Write operations disabled in read-only mode",
993+
));
968994
}
969995
let store = state.store.lock().await;
970996
let mode = match body.mode.as_deref().unwrap_or("soft") {

src/links.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1124,7 +1124,8 @@ mod tests {
11241124
std::fs::create_dir_all(&projects).unwrap();
11251125
std::fs::write(projects.join("Drift.md"), "# Drift\n").unwrap();
11261126

1127-
let content = "---\ntags: [drift]\n---\n`Drift` config\n```\nDrift code\n```\nReal Drift ref";
1127+
let content =
1128+
"---\ntags: [drift]\n---\n`Drift` config\n```\nDrift code\n```\nReal Drift ref";
11281129
let links = discover_links(&store, content, vault_dir.path(), None).unwrap();
11291130
let result = apply_links(content, &links);
11301131

src/serve.rs

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,9 @@ impl EngraphServer {
500500
description = "Create a new note with automatic tag resolution, link discovery, and folder placement. Returns the created file's path, docid, and what was auto-resolved."
501501
)]
502502
async fn create(&self, params: Parameters<CreateParams>) -> Result<CallToolResult, McpError> {
503-
if self.read_only { return Err(read_only_err()); }
503+
if self.read_only {
504+
return Err(read_only_err());
505+
}
504506
let store = self.store.lock().await;
505507
let mut embedder = self.embedder.lock().await;
506508
let input = crate::writer::CreateNoteInput {
@@ -527,7 +529,9 @@ impl EngraphServer {
527529
description = "Append content to an existing note. Safe: only adds content, never overwrites. Detects conflicts via mtime checking."
528530
)]
529531
async fn append(&self, params: Parameters<AppendParams>) -> Result<CallToolResult, McpError> {
530-
if self.read_only { return Err(read_only_err()); }
532+
if self.read_only {
533+
return Err(read_only_err());
534+
}
531535
let store = self.store.lock().await;
532536
let mut embedder = self.embedder.lock().await;
533537
let input = crate::writer::AppendInput {
@@ -548,7 +552,9 @@ impl EngraphServer {
548552
&self,
549553
params: Parameters<UpdateMetadataParams>,
550554
) -> Result<CallToolResult, McpError> {
551-
if self.read_only { return Err(read_only_err()); }
555+
if self.read_only {
556+
return Err(read_only_err());
557+
}
552558
let store = self.store.lock().await;
553559
let input = crate::writer::UpdateMetadataInput {
554560
file: params.0.file,
@@ -569,7 +575,9 @@ impl EngraphServer {
569575
&self,
570576
params: Parameters<MoveNoteParams>,
571577
) -> Result<CallToolResult, McpError> {
572-
if self.read_only { return Err(read_only_err()); }
578+
if self.read_only {
579+
return Err(read_only_err());
580+
}
573581
let store = self.store.lock().await;
574582
let result = crate::writer::move_note(
575583
&params.0.file,
@@ -586,7 +594,9 @@ impl EngraphServer {
586594
description = "Archive a note: moves it to the archive folder, removes from search index. The note is preserved on disk but invisible to search/context. Use unarchive to restore."
587595
)]
588596
async fn archive(&self, params: Parameters<ArchiveParams>) -> Result<CallToolResult, McpError> {
589-
if self.read_only { return Err(read_only_err()); }
597+
if self.read_only {
598+
return Err(read_only_err());
599+
}
590600
let store = self.store.lock().await;
591601
let result = crate::writer::archive_note(
592602
&params.0.file,
@@ -606,7 +616,9 @@ impl EngraphServer {
606616
&self,
607617
params: Parameters<UnarchiveParams>,
608618
) -> Result<CallToolResult, McpError> {
609-
if self.read_only { return Err(read_only_err()); }
619+
if self.read_only {
620+
return Err(read_only_err());
621+
}
610622
let store = self.store.lock().await;
611623
let mut embedder = self.embedder.lock().await;
612624
let result =
@@ -651,7 +663,9 @@ impl EngraphServer {
651663
description = "Edit a specific section of a note. Supports replace, prepend, or append modes. Targets sections by heading name."
652664
)]
653665
async fn edit(&self, params: Parameters<EditParams>) -> Result<CallToolResult, McpError> {
654-
if self.read_only { return Err(read_only_err()); }
666+
if self.read_only {
667+
return Err(read_only_err());
668+
}
655669
let store = self.store.lock().await;
656670
let mode = match params.0.mode.as_deref().unwrap_or("append") {
657671
"replace" => crate::writer::EditMode::Replace,
@@ -678,7 +692,9 @@ impl EngraphServer {
678692
description = "Replace the entire body of a note. Optionally preserves existing frontmatter. Use for major content overhauls."
679693
)]
680694
async fn rewrite(&self, params: Parameters<RewriteParams>) -> Result<CallToolResult, McpError> {
681-
if self.read_only { return Err(read_only_err()); }
695+
if self.read_only {
696+
return Err(read_only_err());
697+
}
682698
let store = self.store.lock().await;
683699
let input = crate::writer::RewriteInput {
684700
file: params.0.file,
@@ -701,7 +717,9 @@ impl EngraphServer {
701717
&self,
702718
params: Parameters<EditFrontmatterParams>,
703719
) -> Result<CallToolResult, McpError> {
704-
if self.read_only { return Err(read_only_err()); }
720+
if self.read_only {
721+
return Err(read_only_err());
722+
}
705723
let ops = parse_frontmatter_ops(&params.0.operations)?;
706724
let store = self.store.lock().await;
707725
let input = crate::writer::EditFrontmatterInput {
@@ -739,7 +757,9 @@ impl EngraphServer {
739757
&self,
740758
params: Parameters<MigrateApplyParams>,
741759
) -> Result<CallToolResult, McpError> {
742-
if self.read_only { return Err(read_only_err()); }
760+
if self.read_only {
761+
return Err(read_only_err());
762+
}
743763
let store = self.store.lock().await;
744764
let preview: crate::migrate::MigrationPreview = serde_json::from_value(params.0.preview)
745765
.map_err(|e| mcp_err(&anyhow::anyhow!("Invalid preview JSON: {e}")))?;
@@ -756,7 +776,9 @@ impl EngraphServer {
756776
&self,
757777
_params: Parameters<MigrateUndoParams>,
758778
) -> Result<CallToolResult, McpError> {
759-
if self.read_only { return Err(read_only_err()); }
779+
if self.read_only {
780+
return Err(read_only_err());
781+
}
760782
let store = self.store.lock().await;
761783
let result =
762784
crate::migrate::undo_last(&store, &self.vault_path).map_err(|e| mcp_err(&e))?;
@@ -768,7 +790,9 @@ impl EngraphServer {
768790
description = "Delete a note. Soft mode (default) moves it to the archive folder. Hard mode permanently removes it from disk and index."
769791
)]
770792
async fn delete(&self, params: Parameters<DeleteParams>) -> Result<CallToolResult, McpError> {
771-
if self.read_only { return Err(read_only_err()); }
793+
if self.read_only {
794+
return Err(read_only_err());
795+
}
772796
let store = self.store.lock().await;
773797
let mode = match params.0.mode.as_deref().unwrap_or("soft") {
774798
"hard" => crate::writer::DeleteMode::Hard,
@@ -824,7 +848,11 @@ pub struct HttpServeOpts {
824848
// Entry point
825849
// ---------------------------------------------------------------------------
826850

827-
pub async fn run_serve(data_dir: &Path, http_opts: Option<HttpServeOpts>, read_only: bool) -> Result<()> {
851+
pub async fn run_serve(
852+
data_dir: &Path,
853+
http_opts: Option<HttpServeOpts>,
854+
read_only: bool,
855+
) -> Result<()> {
828856
if let Some(ref opts) = http_opts
829857
&& opts.no_auth
830858
&& opts.host != "127.0.0.1"

src/writer.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,11 @@ pub fn extract_title(content: &str) -> String {
132132
}
133133

134134
// Search body (or full content if no FM) for heading or first non-empty line
135-
let search_content = if fm.is_empty() { content } else { body.as_str() };
135+
let search_content = if fm.is_empty() {
136+
content
137+
} else {
138+
body.as_str()
139+
};
136140
for line in search_content.lines() {
137141
let trimmed = line.trim();
138142
if trimmed.is_empty() {
@@ -2184,7 +2188,8 @@ mod tests {
21842188

21852189
#[test]
21862190
fn test_merge_user_frontmatter_produces_single_block() {
2187-
let user_content = "---\ntitle: My Note\ntags:\n - project\n - work\n---\n\n# My Note content\n";
2191+
let user_content =
2192+
"---\ntitle: My Note\ntags:\n - project\n - work\n---\n\n# My Note content\n";
21882193
let (user_fm, body) = split_frontmatter(user_content);
21892194
assert!(!user_fm.is_empty());
21902195

@@ -2234,12 +2239,16 @@ mod tests {
22342239

22352240
// "project" tag line should appear only once
22362241
let project_count = merged.matches(" - project\n").count();
2237-
assert_eq!(project_count, 1, "Duplicate tag 'project' should be deduplicated");
2242+
assert_eq!(
2243+
project_count, 1,
2244+
"Duplicate tag 'project' should be deduplicated"
2245+
);
22382246
}
22392247

22402248
#[test]
22412249
fn test_merge_preserves_user_custom_fields() {
2242-
let user_fm = "---\ntitle: My Project\nstatus: active\npriority: high\ntags:\n - work\n---\n";
2250+
let user_fm =
2251+
"---\ntitle: My Project\nstatus: active\npriority: high\ntags:\n - work\n---\n";
22432252
let (user_scalars, user_tags, user_aliases) = parse_frontmatter_fields(user_fm);
22442253
let auto_tags = vec!["project".to_string()];
22452254

0 commit comments

Comments
 (0)