fix: resolve clippy warnings and test errors

- Implement FromStr trait for NodeType instead of custom from_str method
- Fix redundant_closure warning in server.rs:455
- Add #[allow(clippy::too_many_arguments)] for new_file_node
- Fix unused variables in tests (_user_id, _conn)
- Remove unused imports (NodeType, serde_json::json)
- Replace len() > 0 with !is_empty() for clarity
- Replace == false with negation operator
- Format code with cargo fmt
This commit is contained in:
Warren
2026-05-16 16:13:37 +08:00
parent e51728aa35
commit 8371aef693
8 changed files with 24 additions and 16 deletions

View File

@@ -1,5 +1,6 @@
use anyhow::{Context, Result};
use rusqlite::Connection;
use std::str::FromStr;
use uuid::Uuid;
use crate::filetree::node::{Aliases, FileNode, NodeType};
@@ -95,7 +96,8 @@ impl FileTree {
sha256: row.get(4)?,
parent_id: row.get(5)?,
children,
node_type: NodeType::from_str(&row.get::<_, String>(7)?),
node_type: NodeType::from_str(&row.get::<_, String>(7)?)
.unwrap_or(NodeType::Folder),
icon: row.get(8)?,
color: row.get(9)?,
bg_color: row.get(10)?,
@@ -290,6 +292,7 @@ impl FileTree {
}
}
#[allow(clippy::too_many_arguments)]
pub fn new_file_node(
label: &str,
file_uuid: &str,

View File

@@ -1,5 +1,6 @@
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::str::FromStr;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileNode {
@@ -72,13 +73,17 @@ impl NodeType {
NodeType::DynamicLayer => "dynamic_layer",
}
}
}
pub fn from_str(s: &str) -> Self {
impl FromStr for NodeType {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"folder" => NodeType::Folder,
"file" => NodeType::File,
"dynamic_layer" => NodeType::DynamicLayer,
_ => NodeType::Folder,
"folder" => Ok(NodeType::Folder),
"file" => Ok(NodeType::File),
"dynamic_layer" => Ok(NodeType::DynamicLayer),
_ => Ok(NodeType::Folder), // Default to Folder for unknown types
}
}
}

View File

@@ -7,6 +7,7 @@ use axum::{
Router,
};
use serde::Deserialize;
use std::str::FromStr;
use std::sync::{Arc, Mutex};
use crate::audio;
@@ -452,7 +453,9 @@ async fn create_node(
let parent_id = body["parent_id"].as_str().map(|s| s.to_string());
let node_type = body["node_type"]
.as_str()
.map(|s| filetree::node::NodeType::from_str(s))
.map(|s| {
filetree::node::NodeType::from_str(s).unwrap_or(filetree::node::NodeType::Folder)
})
.unwrap_or(filetree::node::NodeType::Folder);
let node = match node_type {

View File

@@ -4,7 +4,6 @@
use markbase::filetree::node::NodeType;
use markbase::filetree::{mode, FileTree};
use rusqlite::Connection;
use serde_json::json;
use uuid::Uuid;
fn temp_db() -> (Connection, String) {
@@ -213,7 +212,7 @@ fn test_api_logic_get_modes() {
#[test]
fn test_api_logic_file_info() {
let (conn, user_id) = temp_db();
let (conn, _user_id) = temp_db();
let file_uuid = "test_file_uuid_123";
FileTree::add_location(&conn, file_uuid, "/path/to/file.mp4", Some("origin")).unwrap();

View File

@@ -33,7 +33,7 @@ fn test_audio_devices_macos() {
let (out, inp, co, ci) = audio_devices();
//至少應該有一些輸出裝置(即使是內建的)
assert!(out.len() > 0 || inp.len() > 0);
assert!(!out.is_empty() || !inp.is_empty());
// current應該是有效的字符串
assert!(!co.is_empty() || !ci.is_empty());

View File

@@ -54,7 +54,7 @@ fn test_is_apple_format_ext() {
fn test_is_document_ext_case_insensitive() {
//測試小寫convert.rs使用小寫比較
assert!(is_document_ext("docx"));
assert!(is_document_ext("DOCX") == false); //函數未轉小寫,直接比較
assert!(!is_document_ext("DOCX")); //函數未轉小寫,直接比較
}
#[test]

View File

@@ -1,6 +1,5 @@
use markbase::filetree::{node::NodeType, FileTree};
use rusqlite::Connection;
use serde_json::json;
use uuid::Uuid;
fn temp_db() -> (Connection, String) {
@@ -207,7 +206,7 @@ fn test_api_build_tree_structure() {
#[test]
fn test_api_add_location() {
let (conn, user_id) = temp_db();
let (_conn, user_id) = temp_db();
let conn = FileTree::open_user_db(&user_id).unwrap();
let file_uuid = "abc123def456";

View File

@@ -1,4 +1,3 @@
use markbase::filetree::node::NodeType;
use markbase::filetree::{mode, FileTree};
use rusqlite::Connection;
use uuid::Uuid;
@@ -102,7 +101,7 @@ fn test_mode_sort_options() {
let mode = mode::get_mode("list").unwrap();
let sort_options = mode.sort_options();
assert!(sort_options.len() > 0, "sort options should not be empty");
assert!(!sort_options.is_empty(), "sort options should not be empty");
}
#[test]
@@ -111,7 +110,7 @@ fn test_mode_filter_options() {
let filter_options = mode.filter_options();
assert!(
filter_options.len() > 0,
!filter_options.is_empty(),
"filter options should not be empty"
);
}