chore: clippy performance improvements

This commit is contained in:
Per Stark
2025-10-15 22:24:59 +02:00
parent 35ff4e1464
commit c3a7e8dc59
11 changed files with 51 additions and 55 deletions

View File

@@ -13,14 +13,12 @@ pub async fn api_auth(
mut request: Request,
next: Next,
) -> Result<Response, ApiError> {
let api_key = extract_api_key(&request).ok_or(ApiError::Unauthorized(
"You have to be authenticated".to_string(),
))?;
let api_key = extract_api_key(&request)
.ok_or_else(|| ApiError::Unauthorized("You have to be authenticated".to_string()))?;
let user = User::find_by_api_key(&api_key, &state.db).await?;
let user = user.ok_or(ApiError::Unauthorized(
"You have to be authenticated".to_string(),
))?;
let user =
user.ok_or_else(|| ApiError::Unauthorized("You have to be authenticated".to_string()))?;
request.extensions_mut().insert(user);

View File

@@ -46,9 +46,7 @@ pub async fn ingest_data(
let futures: Vec<_> = payloads
.into_iter()
.map(|object| {
IngestionTask::create_and_add_to_db(object.clone(), user.id.clone(), &state.db)
})
.map(|object| IngestionTask::create_and_add_to_db(object, user.id.clone(), &state.db))
.collect();
try_join_all(futures).await?;

View File

@@ -188,7 +188,7 @@ stored_object!(IngestionTask, "ingestion_task", {
});
impl IngestionTask {
pub async fn new(content: IngestionPayload, user_id: String) -> Self {
pub fn new(content: IngestionPayload, user_id: String) -> Self {
let now = chrono::Utc::now();
Self {
@@ -224,7 +224,7 @@ impl IngestionTask {
user_id: String,
db: &SurrealDbClient,
) -> Result<IngestionTask, AppError> {
let task = Self::new(content, user_id).await;
let task = Self::new(content, user_id);
db.store_item(task.clone()).await?;
Ok(task)
}
@@ -544,7 +544,7 @@ mod tests {
async fn test_new_task_defaults() {
let user_id = "user123";
let payload = create_payload(user_id);
let task = IngestionTask::new(payload.clone(), user_id.to_string()).await;
let task = IngestionTask::new(payload.clone(), user_id.to_string());
assert_eq!(task.user_id, user_id);
assert_eq!(task.content, payload);
@@ -582,7 +582,7 @@ mod tests {
let db = memory_db().await;
let user_id = "user123";
let payload = create_payload(user_id);
let task = IngestionTask::new(payload, user_id.to_string()).await;
let task = IngestionTask::new(payload, user_id.to_string());
db.store_item(task.clone()).await.expect("store");
let worker_id = "worker-1";
@@ -609,7 +609,7 @@ mod tests {
let db = memory_db().await;
let user_id = "user123";
let payload = create_payload(user_id);
let task = IngestionTask::new(payload, user_id.to_string()).await;
let task = IngestionTask::new(payload, user_id.to_string());
db.store_item(task.clone()).await.expect("store");
let worker_id = "worker-dead";
@@ -650,7 +650,7 @@ mod tests {
let user_id = "user123";
let payload = create_payload(user_id);
let task = IngestionTask::new(payload.clone(), user_id.to_string()).await;
let task = IngestionTask::new(payload.clone(), user_id.to_string());
db.store_item(task.clone()).await.expect("store");
let err = task
@@ -675,7 +675,7 @@ mod tests {
let user_id = "user123";
let payload = create_payload(user_id);
let task = IngestionTask::new(payload.clone(), user_id.to_string()).await;
let task = IngestionTask::new(payload.clone(), user_id.to_string());
db.store_item(task.clone()).await.expect("store");
let err = task
@@ -707,7 +707,7 @@ mod tests {
let user_id = "user123";
let payload = create_payload(user_id);
let task = IngestionTask::new(payload.clone(), user_id.to_string()).await;
let task = IngestionTask::new(payload.clone(), user_id.to_string());
db.store_item(task.clone()).await.expect("store");
let err = task

View File

@@ -168,7 +168,7 @@ impl User {
let now = Utc::now();
let id = Uuid::new_v4().to_string();
let user: Option<User> = db
let user: Option<Self> = db
.client
.query(
"LET $count = (SELECT count() FROM type::table($table))[0].count;
@@ -217,7 +217,7 @@ impl User {
password: &str,
db: &SurrealDbClient,
) -> Result<Self, AppError> {
let user: Option<User> = db
let user: Option<Self> = db
.client
.query(
"SELECT * FROM user
@@ -235,7 +235,7 @@ impl User {
email: &str,
db: &SurrealDbClient,
) -> Result<Option<Self>, AppError> {
let user: Option<User> = db
let user: Option<Self> = db
.client
.query("SELECT * FROM user WHERE email = $email LIMIT 1")
.bind(("email", email.to_string()))
@@ -249,7 +249,7 @@ impl User {
api_key: &str,
db: &SurrealDbClient,
) -> Result<Option<Self>, AppError> {
let user: Option<User> = db
let user: Option<Self> = db
.client
.query("SELECT * FROM user WHERE api_key = $api_key LIMIT 1")
.bind(("api_key", api_key.to_string()))
@@ -264,7 +264,7 @@ impl User {
let api_key = format!("sk_{}", Uuid::new_v4().to_string().replace("-", ""));
// Update the user record with the new API key
let user: Option<User> = db
let user: Option<Self> = db
.client
.query(
"UPDATE type::thing('user', $id)
@@ -285,7 +285,7 @@ impl User {
}
pub async fn revoke_api_key(id: &str, db: &SurrealDbClient) -> Result<(), AppError> {
let user: Option<User> = db
let user: Option<Self> = db
.client
.query(
"UPDATE type::thing('user', $id)
@@ -357,7 +357,7 @@ impl User {
let entity_types: Vec<String> = response
.into_iter()
.map(|item| {
let normalized = KnowledgeEntityType::from(item.entity_type.clone());
let normalized = KnowledgeEntityType::from(item.entity_type);
format!("{:?}", normalized)
})
.collect();
@@ -449,7 +449,7 @@ impl User {
db: &SurrealDbClient,
) -> Result<(), AppError> {
db.query("UPDATE type::thing('user', $user_id) SET timezone = $timezone")
.bind(("table_name", User::table_name()))
.bind(("table_name", Self::table_name()))
.bind(("user_id", user_id.to_string()))
.bind(("timezone", timezone.to_string()))
.await?;
@@ -729,19 +729,19 @@ mod tests {
user_id: user_id.to_string(),
};
let created_task = IngestionTask::new(payload.clone(), user_id.to_string()).await;
let created_task = IngestionTask::new(payload.clone(), user_id.to_string());
db.store_item(created_task.clone())
.await
.expect("Failed to store created task");
let mut processing_task = IngestionTask::new(payload.clone(), user_id.to_string()).await;
let mut processing_task = IngestionTask::new(payload.clone(), user_id.to_string());
processing_task.state = TaskState::Processing;
processing_task.attempts = 1;
db.store_item(processing_task.clone())
.await
.expect("Failed to store processing task");
let mut failed_retry_task = IngestionTask::new(payload.clone(), user_id.to_string()).await;
let mut failed_retry_task = IngestionTask::new(payload.clone(), user_id.to_string());
failed_retry_task.state = TaskState::Failed;
failed_retry_task.attempts = 1;
failed_retry_task.scheduled_at = chrono::Utc::now() - chrono::Duration::minutes(5);
@@ -749,8 +749,7 @@ mod tests {
.await
.expect("Failed to store retryable failed task");
let mut failed_blocked_task =
IngestionTask::new(payload.clone(), user_id.to_string()).await;
let mut failed_blocked_task = IngestionTask::new(payload.clone(), user_id.to_string());
failed_blocked_task.state = TaskState::Failed;
failed_blocked_task.attempts = MAX_ATTEMPTS;
failed_blocked_task.error_message = Some("Too many failures".into());
@@ -758,7 +757,7 @@ mod tests {
.await
.expect("Failed to store blocked task");
let mut completed_task = IngestionTask::new(payload.clone(), user_id.to_string()).await;
let mut completed_task = IngestionTask::new(payload.clone(), user_id.to_string());
completed_task.state = TaskState::Succeeded;
db.store_item(completed_task.clone())
.await
@@ -770,7 +769,7 @@ mod tests {
category: "Category".to_string(),
user_id: other_user_id.to_string(),
};
let other_task = IngestionTask::new(other_payload, other_user_id.to_string()).await;
let other_task = IngestionTask::new(other_payload, other_user_id.to_string());
db.store_item(other_task)
.await
.expect("Failed to store other user task");
@@ -804,14 +803,14 @@ mod tests {
};
// Oldest task
let mut first = IngestionTask::new(payload.clone(), user_id.to_string()).await;
let mut first = IngestionTask::new(payload.clone(), user_id.to_string());
first.created_at = first.created_at - chrono::Duration::minutes(1);
first.updated_at = first.created_at;
first.state = TaskState::Succeeded;
db.store_item(first.clone()).await.expect("store first");
// Latest task
let mut second = IngestionTask::new(payload.clone(), user_id.to_string()).await;
let mut second = IngestionTask::new(payload.clone(), user_id.to_string());
second.state = TaskState::Processing;
db.store_item(second.clone()).await.expect("store second");
@@ -821,7 +820,7 @@ mod tests {
category: "Category".to_string(),
user_id: other_user_id.to_string(),
};
let other_task = IngestionTask::new(other_payload, other_user_id.to_string()).await;
let other_task = IngestionTask::new(other_payload, other_user_id.to_string());
db.store_item(other_task).await.expect("store other");
let tasks = User::get_all_ingestion_tasks(user_id, &db)

View File

@@ -59,13 +59,13 @@ impl TemplateEngine {
match self {
// Only compile this arm for debug builds
#[cfg(debug_assertions)]
TemplateEngine::AutoReload(reloader) => {
Self::AutoReload(reloader) => {
let env = reloader.acquire_env()?;
env.get_template(name)?.render(ctx)
}
// Only compile this arm for release builds
#[cfg(not(debug_assertions))]
TemplateEngine::Embedded(env) => env.get_template(name)?.render(ctx),
Self::Embedded(env) => env.get_template(name)?.render(ctx),
}
}
@@ -78,19 +78,17 @@ impl TemplateEngine {
match self {
// Only compile this arm for debug builds
#[cfg(debug_assertions)]
TemplateEngine::AutoReload(reloader) => {
let env = reloader.acquire_env()?;
let template = env.get_template(template_name)?;
let mut state = template.eval_to_state(context)?;
state.render_block(block_name)
}
Self::AutoReload(reloader) => reloader
.acquire_env()?
.get_template(template_name)?
.eval_to_state(context)?
.render_block(block_name),
// Only compile this arm for release builds
#[cfg(not(debug_assertions))]
TemplateEngine::Embedded(env) => {
let template = env.get_template(template_name)?;
let mut state = template.eval_to_state(context)?;
state.render_block(block_name)
}
Self::Embedded(env) => env
.get_template(template_name)?
.eval_to_state(context)?
.render_block(block.name),
}
}
}

View File

@@ -123,7 +123,10 @@ pub fn fuse_scores(scores: &Scores, weights: FusionWeights) -> f32 {
let fts = scores.fts.unwrap_or(0.0);
let graph = scores.graph.unwrap_or(0.0);
let mut fused = vector * weights.vector + fts * weights.fts + graph * weights.graph;
let mut fused = graph.mul_add(
weights.graph,
vector.mul_add(weights.vector, fts * weights.fts),
);
let signals_present = scores
.vector

File diff suppressed because one or more lines are too long

View File

@@ -137,7 +137,7 @@ pub async fn show_existing_chat(
ChatPageData {
history: messages,
user,
conversation: Some(conversation.clone()),
conversation: Some(conversation),
conversation_archive,
},
))

View File

@@ -221,7 +221,7 @@ pub async fn get_task_updates_stream(
// Send a specific event that HTMX uses to close the connection
// Send a event to reload the recent content
// Send a event to remove the loading indicatior
let check_icon = state.templates.render("icons/check_icon.html", &context!{}).unwrap_or("Ok".to_string());
let check_icon = state.templates.render("icons/check_icon.html", &context!{}).unwrap_or_else(|_| "Ok".to_string());
yield Ok(Event::default().event("stop_loading").data(check_icon));
yield Ok(Event::default().event("update_latest_content").data("Update latest content"));
yield Ok(Event::default().event("close_stream").data("Stream complete"));

View File

@@ -55,7 +55,7 @@ pub async fn show_new_knowledge_entity_form(
) -> Result<impl IntoResponse, HtmlError> {
let entity_types: Vec<String> = KnowledgeEntityType::variants()
.iter()
.map(|s| s.to_string())
.map(|&s| s.to_owned())
.collect();
let existing_entities = User::get_knowledge_entities(&user.id, &state.db).await?;
@@ -729,7 +729,7 @@ pub async fn show_edit_knowledge_entity_form(
// Get entity types
let entity_types: Vec<String> = KnowledgeEntityType::variants()
.iter()
.map(|s| s.to_string())
.map(|&s| s.to_owned())
.collect();
// Get the entity and validate ownership

View File

@@ -84,7 +84,7 @@ fn add_char_into_object(
if let ObjectStatus::KeyQuoteOpen { ref key_so_far, .. } = current_status {
let key = key_so_far.iter().collect::<String>();
if let Value::Object(obj) = object {
obj.insert(key.clone(), Value::Null);
obj.insert(key, Value::Null);
}
*current_status = ObjectStatus::KeyQuoteClose {
key: key_so_far.clone(),