Compare commits

...

39 Commits

Author SHA1 Message Date
99716cee1a Update dependency @mui/lab to v6.0.0-beta.10
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-09-20 00:30:40 +00:00
7d8f8388f5 Update dependency @mui/x-tree-view to v7.17.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-09-19 00:31:12 +00:00
4608a247e1 Update dependency @mui/x-date-pickers to v7.17.0
All checks were successful
continuous-integration/drone/push Build is passing
2024-09-18 00:39:52 +00:00
abc54428c6 Update dependency jspdf to v2.5.2
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-09-18 00:30:19 +00:00
74c1522be2 Update dependency @mui/x-data-grid to v7.17.0
All checks were successful
continuous-integration/drone/push Build is passing
2024-09-17 00:39:25 +00:00
e200b7eba7 Update dependency vite to v5.4.6
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-09-17 00:30:00 +00:00
a0ba9fe3b9 Update Rust crate redis to v0.27.2
All checks were successful
continuous-integration/drone/push Build is passing
2024-09-16 00:41:47 +00:00
fb1e2bab89 Update Rust crate anyhow to v1.0.89
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-09-16 00:30:34 +00:00
3a148a2879 Update dependency @fontsource/roboto to v5.1.0
All checks were successful
continuous-integration/drone/push Build is passing
2024-09-15 00:38:41 +00:00
5005a2f0c2 Update Rust crate redis to 0.27.0
All checks were successful
continuous-integration/drone/push Build is passing
2024-09-15 00:36:48 +00:00
ef1685dc82 Update dependency vite to v5.4.5
All checks were successful
continuous-integration/drone/push Build is passing
2024-09-14 00:45:07 +00:00
aae46c69dd Update Rust crate lettre to v0.11.9
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-09-14 00:30:04 +00:00
8d6686bd1b Update dependency vite to v5.4.4
All checks were successful
continuous-integration/drone/push Build is passing
2024-09-13 00:43:05 +00:00
ec727121c9 Update dependency @types/jest to v29.5.13
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-09-13 00:30:07 +00:00
595fd692a6 Update Rust crate mailchecker to v6.0.9
All checks were successful
continuous-integration/drone/push Build is passing
2024-09-12 00:48:29 +00:00
c6832203ad Update Rust crate anyhow to v1.0.88
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-09-12 00:31:22 +00:00
ca4ac359d3 Update frontend dependencies
All checks were successful
continuous-integration/drone/push Build is passing
2024-09-09 22:17:51 +02:00
5ce523a3fb Fix Docker image
All checks were successful
continuous-integration/drone/push Build is passing
2024-09-09 22:05:43 +02:00
3f42a0d989 Fix cargo clippy issue
All checks were successful
continuous-integration/drone/push Build is passing
2024-09-09 22:01:29 +02:00
d9ae92dbc2 Update backend dependencies
Some checks failed
continuous-integration/drone/push Build is failing
2024-09-09 21:51:37 +02:00
047ec9feca Update dependency @mui/x-date-pickers to v7.16.0
All checks were successful
continuous-integration/drone/push Build is passing
2024-09-06 00:40:33 +00:00
a763877d2a Update dependency @mui/x-data-grid to v7.16.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-09-06 00:31:45 +00:00
31f6eb4a5e Update dependency filesize to v10.1.6
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-09-05 00:30:18 +00:00
7cf0f191be Merge pull request 'Update dependency vite-tsconfig-paths to v5' (#319) from renovate/vite-tsconfig-paths-5.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #319
2024-09-04 18:47:33 +00:00
03b678145a Merge pull request 'Update dependency date-and-time to v3.5.0' (#309) from renovate/date-and-time-3.x-lockfile into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #309
2024-09-04 18:47:24 +00:00
694a50ea0c Merge pull request 'Update dependency mui-color-input to v4' (#318) from renovate/mui-color-input-4.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #318
2024-09-04 18:47:17 +00:00
0da0842f62 Update dependency vite to v5.4.3
All checks were successful
continuous-integration/drone/push Build is passing
2024-09-04 00:39:17 +00:00
cc355a9510 Update dependency filesize to v10.1.5
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-09-04 00:30:33 +00:00
29b3b9f6ba Update dependency vite-tsconfig-paths to v5
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2024-09-03 00:31:24 +00:00
ef04592efa Update dependency mui-color-input to v4
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2024-09-02 00:30:47 +00:00
5ac072b5e8 Update dependency vite to v5.4.2
All checks were successful
continuous-integration/drone/push Build is passing
2024-09-01 00:40:09 +00:00
6c4789b59b Update dependency @mui/x-tree-view to v7.15.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-09-01 00:30:53 +00:00
4f926f7786 Update dependency @mui/x-date-pickers to v7.15.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-08-31 00:31:04 +00:00
49b2209517 Update dependency @mui/x-data-grid to v7.15.0
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-30 00:39:04 +00:00
12e9ad6362 Update dependency @testing-library/react to v16.0.1
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-08-30 00:30:12 +00:00
8168984286 Update dependency react-router-dom to v6.26.1
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-08-29 00:30:39 +00:00
8489f738dd Update dependency date-and-time to v3.5.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2024-08-29 00:30:34 +00:00
f4c56fd797 Update dependency @testing-library/jest-dom to v6.5.0
All checks were successful
continuous-integration/drone/push Build is passing
2024-08-28 00:39:24 +00:00
1a5e55f175 Update dependency @mui/x-tree-view to v7.14.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-08-28 00:30:10 +00:00
11 changed files with 1403 additions and 893 deletions

File diff suppressed because it is too large Load Diff

View File

@ -5,45 +5,45 @@
"type": "module", "type": "module",
"dependencies": { "dependencies": {
"@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/plugin-proposal-private-property-in-object": "^7.21.11",
"@emotion/react": "^11.11.4", "@emotion/react": "^11.13.3",
"@emotion/styled": "^11.11.0", "@emotion/styled": "^11.13.0",
"@fontsource/roboto": "^5.0.13", "@fontsource/roboto": "^5.0.15",
"@fullcalendar/core": "^6.1.14", "@fullcalendar/core": "^6.1.15",
"@fullcalendar/daygrid": "^6.1.14", "@fullcalendar/daygrid": "^6.1.15",
"@fullcalendar/interaction": "^6.1.14", "@fullcalendar/interaction": "^6.1.15",
"@fullcalendar/list": "^6.1.14", "@fullcalendar/list": "^6.1.15",
"@fullcalendar/react": "^6.1.14", "@fullcalendar/react": "^6.1.15",
"@mdi/js": "^7.2.96", "@mdi/js": "^7.2.96",
"@mdi/react": "^1.6.1", "@mdi/react": "^1.6.1",
"@mui/icons-material": "^5.15.17", "@mui/icons-material": "^6.0.2",
"@mui/lab": "^5.0.0-alpha.140", "@mui/lab": "^6.0.0-beta.9",
"@mui/material": "^5.15.17", "@mui/material": "^6.0.2",
"@mui/x-data-grid": "^7.1.1", "@mui/x-data-grid": "^7.16.0",
"@mui/x-date-pickers": "^7.7.0", "@mui/x-date-pickers": "^7.16.0",
"@mui/x-tree-view": "^7.4.0", "@mui/x-tree-view": "^7.16.0",
"@testing-library/jest-dom": "^6.4.5", "@testing-library/jest-dom": "^6.5.0",
"@testing-library/react": "^16.0.0", "@testing-library/react": "^16.0.1",
"@testing-library/user-event": "^14.0.0", "@testing-library/user-event": "^14.0.0",
"@types/jest": "^29.0.0", "@types/jest": "^29.0.0",
"@types/react": "^18.3.2", "@types/react": "^18.3.5",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.0",
"@vitejs/plugin-react": "^4.2.1", "@vitejs/plugin-react": "^4.2.1",
"date-and-time": "^3.2.0", "date-and-time": "^3.5.0",
"dayjs": "^1.11.11", "dayjs": "^1.11.13",
"email-validator": "^2.0.4", "email-validator": "^2.0.4",
"filesize": "^10.1.2", "filesize": "^10.1.6",
"jspdf": "^2.5.1", "jspdf": "^2.5.1",
"mui-color-input": "^2.0.3", "mui-color-input": "^4.0.0",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-easy-crop": "^5.0.7", "react-easy-crop": "^5.0.8",
"react-qr-code": "^2.0.14", "react-qr-code": "^2.0.14",
"react-router-dom": "^6.23.1", "react-router-dom": "^6.26.2",
"react-zoom-pan-pinch": "^3.4.4", "react-zoom-pan-pinch": "^3.4.4",
"svg2pdf.js": "^2.2.3", "svg2pdf.js": "^2.2.3",
"typescript": "^5.4.5", "typescript": "^5.6.2",
"vite": "^5.2.11", "vite": "^5.4.3",
"vite-tsconfig-paths": "^4.3.2", "vite-tsconfig-paths": "^5.0.1",
"web-vitals": "^3.5.2" "web-vitals": "^3.5.2"
}, },
"scripts": { "scripts": {

View File

@ -11,7 +11,7 @@ import {
} from "@mui/material"; } from "@mui/material";
import Box from "@mui/material/Box"; import Box from "@mui/material/Box";
import Button from "@mui/material/Button"; import Button from "@mui/material/Button";
import Grid from "@mui/material/Grid"; import Grid from "@mui/material/Grid2";
import TextField from "@mui/material/TextField"; import TextField from "@mui/material/TextField";
import Typography from "@mui/material/Typography"; import Typography from "@mui/material/Typography";
import * as React from "react"; import * as React from "react";
@ -167,7 +167,7 @@ export function LoginRoute(): React.ReactElement {
</Button> </Button>
<Grid container> <Grid container>
<Grid item xs> <Grid>
<Typography variant="body2" color={"primary"}> <Typography variant="body2" color={"primary"}>
<Link <Link
to="/password_forgotten" to="/password_forgotten"
@ -177,7 +177,7 @@ export function LoginRoute(): React.ReactElement {
</Link> </Link>
</Typography> </Typography>
</Grid> </Grid>
<Grid item> <Grid>
<Typography variant="body2" color={"primary"}> <Typography variant="body2" color={"primary"}>
<Link <Link
to="/new-account" to="/new-account"

View File

@ -3,7 +3,8 @@ import DeleteIcon from "@mui/icons-material/Delete";
import EditIcon from "@mui/icons-material/Edit"; import EditIcon from "@mui/icons-material/Edit";
import FileDownloadIcon from "@mui/icons-material/FileDownload"; import FileDownloadIcon from "@mui/icons-material/FileDownload";
import SaveIcon from "@mui/icons-material/Save"; import SaveIcon from "@mui/icons-material/Save";
import { Button, Grid, Stack } from "@mui/material"; import { Button, Stack } from "@mui/material";
import Grid from "@mui/material/Grid2";
import React from "react"; import React from "react";
import { useNavigate, useParams } from "react-router-dom"; import { useNavigate, useParams } from "react-router-dom";
import { ServerApi } from "../../../api/ServerApi"; import { ServerApi } from "../../../api/ServerApi";
@ -352,7 +353,7 @@ export function CouplePage(p: {
<Grid container spacing={2}> <Grid container spacing={2}>
{/* General info */} {/* General info */}
<Grid item sm={12} md={6}> <Grid size={{ sm: 12, md: 6 }}>
<PropertiesBox title="Informations générales"> <PropertiesBox title="Informations générales">
{/* Husband */} {/* Husband */}
<br /> <br />
@ -427,7 +428,7 @@ export function CouplePage(p: {
{ {
/* Photo */ !family.family.disable_couple_photos && ( /* Photo */ !family.family.disable_couple_photos && (
<Grid item sm={12} md={6}> <Grid size={{ sm: 12, md: 6 }}>
<PropertiesBox title="Photo"> <PropertiesBox title="Photo">
<div style={{ textAlign: "center" }}> <div style={{ textAlign: "center" }}>
<CouplePhoto couple={couple} width={150} /> <CouplePhoto couple={couple} width={150} />
@ -474,7 +475,7 @@ export function CouplePage(p: {
{/* Children */} {/* Children */}
{p.children && ( {p.children && (
<Grid item sm={12} md={6}> <Grid size={{ sm: 12, md: 6 }}>
<PropertiesBox title="Enfants"> <PropertiesBox title="Enfants">
{p.children.length === 0 ? ( {p.children.length === 0 ? (
<>Aucun enfant</> <>Aucun enfant</>

View File

@ -7,12 +7,12 @@ import FileDownloadIcon from "@mui/icons-material/FileDownload";
import SaveIcon from "@mui/icons-material/Save"; import SaveIcon from "@mui/icons-material/Save";
import { import {
Button, Button,
Grid,
ListItemAvatar, ListItemAvatar,
ListItemButton, ListItemButton,
ListItemText, ListItemText,
Stack, Stack,
} from "@mui/material"; } from "@mui/material";
import Grid from "@mui/material/Grid2";
import * as EmailValidator from "email-validator"; import * as EmailValidator from "email-validator";
import React from "react"; import React from "react";
import { useNavigate, useParams } from "react-router-dom"; import { useNavigate, useParams } from "react-router-dom";
@ -384,7 +384,7 @@ export function MemberPage(p: {
<Grid container spacing={2}> <Grid container spacing={2}>
{/* General info */} {/* General info */}
<Grid item sm={12} md={6}> <Grid size={{ sm: 12, md: 6 }}>
<PropertiesBox title="Informations générales"> <PropertiesBox title="Informations générales">
{/* Sex */} {/* Sex */}
<SexSelection <SexSelection
@ -504,7 +504,7 @@ export function MemberPage(p: {
</Grid> </Grid>
{/* Photo */} {/* Photo */}
<Grid item sm={12} md={6}> <Grid size={{ sm: 12, md: 6 }}>
<PropertiesBox title="Photo"> <PropertiesBox title="Photo">
<div style={{ textAlign: "center" }}> <div style={{ textAlign: "center" }}>
<MemberPhoto member={member} width={150} /> <MemberPhoto member={member} width={150} />
@ -549,7 +549,7 @@ export function MemberPage(p: {
{/* Contact */} {/* Contact */}
{(p.editing || member.hasContactInfo) && ( {(p.editing || member.hasContactInfo) && (
<Grid item sm={12} md={6}> <Grid size={{ sm: 12, md: 6 }}>
<PropertiesBox title="Contact"> <PropertiesBox title="Contact">
{/* Email */} {/* Email */}
<PropEdit <PropEdit
@ -630,7 +630,7 @@ export function MemberPage(p: {
{/* Bio */} {/* Bio */}
{(p.editing || member.hasNote) && ( {(p.editing || member.hasNote) && (
<Grid item sm={12} md={6}> <Grid size={{ sm: 12, md: 6 }}>
<PropertiesBox title="Biographie"> <PropertiesBox title="Biographie">
<PropEdit <PropEdit
label="Biographie" label="Biographie"
@ -651,7 +651,7 @@ export function MemberPage(p: {
{/* Couples */} {/* Couples */}
{p.couples && ( {p.couples && (
<Grid item sm={12} md={6}> <Grid size={{ sm: 12, md: 6 }}>
<PropertiesBox title={member.sex === "F" ? "Époux" : "Épouse"}> <PropertiesBox title={member.sex === "F" ? "Époux" : "Épouse"}>
{p.couples!.length === 0 ? ( {p.couples!.length === 0 ? (
<>{member.sex === "F" ? "Aucun époux" : "Aucune épouse"}</> <>{member.sex === "F" ? "Aucun époux" : "Aucune épouse"}</>
@ -678,7 +678,7 @@ export function MemberPage(p: {
{/* Children */} {/* Children */}
{p.children && ( {p.children && (
<Grid item sm={12} md={6}> <Grid size={{ sm: 12, md: 6 }}>
<PropertiesBox title="Enfants"> <PropertiesBox title="Enfants">
{p.children.length === 0 ? ( {p.children.length === 0 ? (
<>Aucun enfant</> <>Aucun enfant</>
@ -707,7 +707,7 @@ export function MemberPage(p: {
{/* Siblings */} {/* Siblings */}
{p.siblings && ( {p.siblings && (
<Grid item sm={12} md={6}> <Grid size={{ sm: 12, md: 6 }}>
<PropertiesBox title="Frères et sœurs"> <PropertiesBox title="Frères et sœurs">
{p.siblings.length === 0 ? ( {p.siblings.length === 0 ? (
<>Aucun frère ou sœur</> <>Aucun frère ou sœur</>

View File

@ -3,7 +3,7 @@ import Icon from "@mdi/react";
import Avatar from "@mui/material/Avatar"; import Avatar from "@mui/material/Avatar";
import Box from "@mui/material/Box"; import Box from "@mui/material/Box";
import CssBaseline from "@mui/material/CssBaseline"; import CssBaseline from "@mui/material/CssBaseline";
import Grid from "@mui/material/Grid"; import Grid from "@mui/material/Grid2";
import Paper from "@mui/material/Paper"; import Paper from "@mui/material/Paper";
import Typography from "@mui/material/Typography"; import Typography from "@mui/material/Typography";
import * as React from "react"; import * as React from "react";
@ -40,10 +40,7 @@ export function BaseLoginPage() {
<Grid container component="main" sx={{ height: "100vh" }}> <Grid container component="main" sx={{ height: "100vh" }}>
<CssBaseline /> <CssBaseline />
<Grid <Grid
item size={{ xs: false, sm: 4, md: 7 }}
xs={false}
sm={4}
md={7}
sx={{ sx={{
backgroundImage: "url(/login_splash.jpg)", backgroundImage: "url(/login_splash.jpg)",
backgroundRepeat: "no-repeat", backgroundRepeat: "no-repeat",
@ -55,7 +52,12 @@ export function BaseLoginPage() {
backgroundPosition: "center", backgroundPosition: "center",
}} }}
/> />
<Grid item xs={12} sm={8} md={5} component={Paper} elevation={6} square> <Grid
size={{ xs: 12, sm: 8, md: 5 }}
component={Paper}
elevation={6}
square
>
<Box <Box
sx={{ sx={{
my: 8, my: 8,

1356
geneit_backend/Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -7,37 +7,37 @@ edition = "2021"
[dependencies] [dependencies]
log = "0.4.21" log = "0.4.21"
env_logger = "0.11.3" env_logger = "0.11.5"
clap = { version = "4.5.4", features = ["derive", "env"] } clap = { version = "4.5.17", features = ["derive", "env"] }
lazy_static = "1.4.0" lazy_static = "1.5.0"
lazy-regex = "3.1.0" lazy-regex = "3.3.0"
anyhow = "1.0.83" anyhow = "1.0.87"
actix-web = "4.5.1" actix-web = "4.9.0"
actix-cors = "0.7.0" actix-cors = "0.7.0"
actix-multipart = "0.7.0" actix-multipart = "0.7.0"
actix-remote-ip = "0.1.0" actix-remote-ip = "0.1.0"
futures-util = "0.3.30" futures-util = "0.3.30"
diesel = { version = "2.1.6", features = ["postgres"] } diesel = { version = "2.2.4", features = ["postgres"] }
diesel_migrations = "2.1.0" diesel_migrations = "2.1.0"
serde = { version = "1.0.198", features = ["derive"] } serde = { version = "1.0.210", features = ["derive"] }
serde_json = "1.0.117" serde_json = "1.0.128"
mailchecker = "6.0.4" mailchecker = "6.0.8"
redis = "0.25.3" redis = "0.27.0"
lettre = "0.11.7" lettre = "0.11.8"
rand = "0.8.5" rand = "0.8.5"
bcrypt = "0.15.1" bcrypt = "0.15.1"
light-openid = "1.0.2" light-openid = "1.0.2"
thiserror = "1.0.60" thiserror = "1.0.60"
serde_with = "3.8.1" serde_with = "3.8.1"
rust_iso3166 = "0.1.12" rust_iso3166 = "0.1.12"
rust-s3 = "0.34.0" rust-s3 = "0.35.1"
sha2 = "0.10.8" sha2 = "0.10.8"
image = "0.25.1" image = "0.25.1"
uuid = { version = "1.8.0", features = ["v4"] } uuid = { version = "1.8.0", features = ["v4"] }
httpdate = "1.0.3" httpdate = "1.0.3"
zip = "2.0.0" zip = "2.2.0"
mime_guess = "2.0.4" mime_guess = "2.0.4"
tempfile = "3.10.1" tempfile = "3.12.0"
base64 = "0.22.0" base64 = "0.22.0"
ical = { version = "0.11.0", features = ["generator", "ical", "vcard"] } ical = { version = "0.11.0", features = ["generator", "ical", "vcard"] }
chrono = "0.4.38" chrono = "0.4.38"

View File

@ -6,4 +6,4 @@ RUN apt-get update \
COPY geneit_backend /usr/local/bin/geneit_backend COPY geneit_backend /usr/local/bin/geneit_backend
ENTRYPOINT /usr/local/bin/geneit_backend ENTRYPOINT ["/usr/local/bin/geneit_backend"]

View File

@ -194,6 +194,7 @@ impl AppConfig {
db: self.redis_db_number, db: self.redis_db_number,
username: self.redis_username.clone(), username: self.redis_username.clone(),
password: Some(self.redis_password.clone()), password: Some(self.redis_password.clone()),
protocol: Default::default(),
}, },
} }
} }
@ -245,7 +246,7 @@ impl AppConfig {
} }
/// Get S3 bucket /// Get S3 bucket
pub fn s3_bucket(&self) -> anyhow::Result<Bucket> { pub fn s3_bucket(&self) -> anyhow::Result<Box<Bucket>> {
Ok(Bucket::new( Ok(Bucket::new(
&self.s3_bucket_name, &self.s3_bucket_name,
Region::Custom { Region::Custom {

View File

@ -45,14 +45,14 @@ where
{ {
let value_str = serde_json::to_string(value)?; let value_str = serde_json::to_string(value)?;
execute_request(|conn| Ok(conn.set_ex(key, value_str, lifetime.as_secs())?))?; execute_request(|conn| Ok(conn.set_ex::<_, _, ()>(key, value_str, lifetime.as_secs())?))?;
Ok(()) Ok(())
} }
/// Remove a value from Redis /// Remove a value from Redis
pub async fn remove_value(key: &str) -> anyhow::Result<()> { pub async fn remove_value(key: &str) -> anyhow::Result<()> {
execute_request(|conn| Ok(conn.del(key)?))?; execute_request(|conn| Ok(conn.del::<_, ()>(key)?))?;
Ok(()) Ok(())
} }