fix warnings + upgrade toolchain

pull/12/head
Patrick Cleavelin 2024-06-09 22:41:33 -05:00
parent c07ac7ceac
commit b02d3f3da7
9 changed files with 84 additions and 59 deletions

View File

@ -38,3 +38,6 @@ rusqlite = { version = "0.29.0", features = ["chrono"] }
[target.'cfg(windows)'.dependencies]
rusqlite = { version = "0.29.0", features = ["bundled", "chrono"] }
[lints.clippy]
map_flatten = "allow"

View File

@ -16,12 +16,15 @@
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1659877975,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
"lastModified": 1705309234,
"narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
"rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
"type": "github"
},
"original": {
@ -48,11 +51,11 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1665296151,
"narHash": "sha256-uOB0oxqxN9K7XGF1hcnY+PQnlQJ+3bP2vCn/+Ru/bbc=",
"lastModified": 1706487304,
"narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "14ccaaedd95a488dd7ae142757884d8e125b3363",
"rev": "90f456026d284c22b3e3497be980b2e47d0b28ac",
"type": "github"
},
"original": {
@ -75,11 +78,11 @@
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1676169013,
"narHash": "sha256-mhUWa6TUg6Qjba1OdxPuW1ctCuU4O4lSObVc6UUUE0E=",
"lastModified": 1717985971,
"narHash": "sha256-24h/qKp0aeI+Ew13WdRF521kY24PYa5HOvw0mlrABjk=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "ef4cd733dc6b595cab5092f5004a489c5fd80b07",
"rev": "abfe5b3126b1b7e9e4daafc1c6478d17f0b584e7",
"type": "github"
},
"original": {
@ -87,6 +90,21 @@
"repo": "rust-overlay",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",

View File

@ -1 +1 @@
nightly
stable

View File

@ -27,19 +27,16 @@ pub(crate) struct User {
pub(crate) name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
pub(crate) struct AppPermissions(pub(crate) u8);
impl Default for AppPermissions {
fn default() -> AppPermissions {
AppPermissions(0)
}
}
impl AppPermissions {
pub(crate) fn can(&self, perm: AppPermission) -> bool {
(self.0 & (perm as u8) > 0) || (self.0 & (AppPermission::Admin as u8) > 0)
}
// FIXME: eventually use this
#[allow(dead_code)]
pub(crate) fn add(&mut self, perm: Permission) {
self.0 |= perm as u8;
}
@ -59,13 +56,17 @@ impl AppPermission {
}
}
impl ToString for AppPermission {
fn to_string(&self) -> String {
match self {
AppPermission::None => todo!(),
AppPermission::AddGuild => "Add Guild".to_string(),
AppPermission::Admin => "Admin".to_string(),
}
impl std::fmt::Display for AppPermission {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{}",
match self {
AppPermission::None => todo!(),
AppPermission::AddGuild => "Add Guild".to_string(),
AppPermission::Admin => "Admin".to_string(),
}
)
}
}
@ -81,13 +82,8 @@ impl FromStr for AppPermission {
}
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[derive(Default, Debug, Clone, Copy, Serialize, Deserialize)]
pub(crate) struct Permissions(pub(crate) u8);
impl Default for Permissions {
fn default() -> Permissions {
Permissions(0)
}
}
impl Permissions {
pub(crate) fn can(&self, perm: Permission) -> bool {
@ -116,16 +112,20 @@ impl Permission {
}
}
impl ToString for Permission {
fn to_string(&self) -> String {
match self {
Permission::None => todo!(),
Permission::UploadSounds => "Upload Sounds".to_string(),
Permission::DeleteSounds => "Delete Sounds".to_string(),
Permission::Soundboard => "Soundboard".to_string(),
Permission::AddChannel => "Add Channel".to_string(),
Permission::Moderator => "Moderator".to_string(),
}
impl std::fmt::Display for Permission {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{}",
match self {
Permission::None => todo!(),
Permission::UploadSounds => "Upload Sounds".to_string(),
Permission::DeleteSounds => "Delete Sounds".to_string(),
Permission::Soundboard => "Soundboard".to_string(),
Permission::AddChannel => "Add Channel".to_string(),
Permission::Moderator => "Moderator".to_string(),
},
)
}
}

View File

@ -138,6 +138,7 @@ impl Database {
// NOTE(pcleavelin): for some reason this needs to be a let-binding or else
// the compiler complains about it being dropped too early (maybe I should update the compiler version)
#[allow(clippy::useless_conversion)]
let guilds = query
.query_map(&[(":username", username)], |row| {
Ok(Guild {
@ -167,6 +168,7 @@ impl Database {
// NOTE(pcleavelin): for some reason this needs to be a let-binding or else
// the compiler complains about it being dropped too early (maybe I should update the compiler version)
#[allow(clippy::useless_conversion)]
let intros = query
.query_map(
&[
@ -206,6 +208,7 @@ impl Database {
// NOTE(pcleavelin): for some reason this needs to be a let-binding or else
// the compiler complains about it being dropped too early (maybe I should update the compiler version)
#[allow(clippy::useless_conversion)]
let intros = query
.query_map(
&[
@ -305,13 +308,14 @@ impl Database {
// NOTE(pcleavelin): for some reason this needs to be a let-binding or else
// the compiler complains about it being dropped too early (maybe I should update the compiler version)
#[allow(clippy::useless_conversion)]
let intros = query
.query_map(
&[
// :vomit:
(":guild_id", &guild_id.to_string()),
],
|row| Ok(row.get(0)?),
|row| row.get(0),
)?
.into_iter()
.collect::<Result<Vec<String>>>();
@ -328,7 +332,7 @@ impl Database {
let all_user_intros = self.get_all_user_intros(guild_id)?.into_iter();
let intros = all_user_intros
.filter(|intro| &intro.username == &username && &intro.channel_name == channel_name)
.filter(|intro| intro.username == username && intro.channel_name == channel_name)
.map(|intro| intro.intro)
.collect();

View File

@ -1,3 +1,5 @@
#![allow(dead_code)]
use std::collections::HashMap;
pub trait Build {
@ -191,7 +193,7 @@ impl Build for HtmxBuilder {
}
}
if self.tag != Tag::JustText && self.tag != Tag::Empty {
string.push_str(">");
string.push('>');
}
}
@ -229,23 +231,23 @@ impl HtmxBuilder {
self
}
pub fn hx_get(mut self, uri: &str) -> Self {
pub fn hx_get(self, uri: &str) -> Self {
self.attribute("hx-get", uri)
}
pub fn hx_post(mut self, uri: &str) -> Self {
pub fn hx_post(self, uri: &str) -> Self {
self.attribute("hx-post", uri)
}
pub fn hx_swap(mut self, swap_method: SwapMethod) -> Self {
pub fn hx_swap(self, swap_method: SwapMethod) -> Self {
self.attribute("hx-swap", swap_method.as_str())
}
pub fn hx_trigger(mut self, trigger: &str) -> Self {
pub fn hx_trigger(self, trigger: &str) -> Self {
self.attribute("hx-trigger", trigger)
}
pub fn hx_target(mut self, target: &str) -> Self {
pub fn hx_target(self, target: &str) -> Self {
self.attribute("hx-target", target)
}

View File

@ -1,6 +1,6 @@
#![feature(stmt_expr_attributes)]
#![feature(proc_macro_hygiene)]
#![feature(async_closure)]
// #![feature(stmt_expr_attributes)]
// #![feature(proc_macro_hygiene)]
// #![feature(async_closure)]
mod auth;
mod db;
@ -315,7 +315,7 @@ async fn main() -> std::io::Result<()> {
tracing_subscriber::fmt::init();
let mut settings = serde_json::from_str::<Settings>(
let settings = serde_json::from_str::<Settings>(
&std::fs::read_to_string("config/settings.json").expect("no config/settings.json"),
)
.expect("error parsing settings file");

View File

@ -1,15 +1,14 @@
use crate::{
auth::{self},
auth,
db::{self, User},
htmx::{Build, HtmxBuilder, Tag},
settings::ApiState,
};
use axum::{
extract::{Path, Query, State},
extract::{Path, State},
response::{Html, Redirect},
};
use iter_tools::Itertools;
use serde::Deserialize;
use tracing::error;
fn page_header(title: &str) -> HtmxBuilder {
@ -478,10 +477,9 @@ async fn permissions_editor(state: &ApiState, guild_id: u64) -> HtmxBuilder {
b = b.builder(Tag::TableData, |b| {
b.builder(Tag::Input, |b| {
let mut b = b.attribute("type", "checkbox").attribute(
"name",
&format!("{}#{}", permission.0, perm.to_string()),
);
let mut b = b
.attribute("type", "checkbox")
.attribute("name", &format!("{}#{}", permission.0, perm));
if permission.1.can(auth::Permission::Moderator) {
b = b.flag("disabled");

View File

@ -27,7 +27,7 @@ impl FromRequestParts<ApiState> for db::User {
Parts { headers, .. }: &mut Parts,
state: &ApiState,
) -> Result<Self, Self::Rejection> {
let jar = CookieJar::from_headers(&headers);
let jar = CookieJar::from_headers(headers);
if let Some(token) = jar.get("access_token") {
match state.db.lock().await.get_user_from_api_key(token.value()) {