backend/src/handler/user.rs
backend/src/handler/user/create_user.rs
backend/src/handler/user/validate_name.rs
1 use serde :: Deserialize ;
2
3 #[ derive ( Debug , Clone , Deserialize )]
4 pub struct CreateUserServerRequest {
5 pub name : String ,
6 pub email : String ,
7 pub password : String ,
8 }
9 1 use axum :: { Json , extract :: State , http :: StatusCode };
2
3 use gitdot_core :: dto :: CreateUserRequest ;
4
5 use crate :: app :: { AppError , AppResponse , AppState };
6 use crate :: dto :: CreateUserServerRequest ;
7
8 pub async fn create_user (
9 State ( state ) : State < AppState >,
10 Json ( request ) : Json < CreateUserServerRequest >,
11 ) -> Result < AppResponse <()>, AppError > {
12 let create_request = CreateUserRequest :: new ( & request . name , & request . email , & request . password ) ? ;
13 state
14 . user_service
15 . create_user ( create_request )
16 . await
17 . map_err ( AppError :: from )
18 . map ( | _ | AppResponse :: new ( StatusCode :: CREATED , ()))
19 }
20 1 use axum :: {
2 extract :: { Path , State },
3 http :: StatusCode ,
4 };
5
6 use gitdot_core :: dto :: ValidateNameRequest ;
7
8 use crate :: app :: { AppError , AppResponse , AppState };
9
10 pub async fn validate_name (
11 State ( state ) : State < AppState >,
12 Path ( user_name ) : Path < String >,
13 ) -> Result < AppResponse <()>, AppError > {
14 let validate_request = ValidateNameRequest :: new ( & user_name ) ? ;
15 state
16 . user_service
17 . validate_name ( validate_request )
18 . await
19 . map_err ( AppError :: from )
20 . map ( | _ | AppResponse :: new ( StatusCode :: OK , ()))
21 }
22 1 use async_trait :: async_trait ;
2
3 use supabase :: { Client , Error };
4
5 #[ async_trait ]
6 pub trait SupabaseClient : Send + Sync + Clone + ' static {
7 async fn create_user ( & self , name : & str , email : & str , password : & str ) -> Result <(), Error >;
8 }
9
10 #[ derive ( Debug , Clone )]
11 pub struct SupabaseClientImpl {
12 client : Client ,
13 }
14
15 impl SupabaseClientImpl {
16 pub fn new ( supabase_project_url : & str , supabase_anon_key : & str ) -> Self {
17 Self {
18 client : Client :: new ( supabase_project_url , supabase_anon_key )
19 . expect ( " Failed to create Supabase client " ),
20 }
21 }
22 }
23
24 #[ async_trait ]
25 impl SupabaseClient for SupabaseClientImpl {
26 async fn create_user ( & self , name : & str , email : & str , password : & str ) -> Result <(), Error > {
27 self . client
28 . auth ()
29 . sign_up_with_email_password_and_data (
30 email ,
31 password ,
32 Some ( serde_json :: json! ({ " name " : name })),
33 Option :: None ,
34 )
35 . await ? ;
36
37 Ok (())
38 }
39 }
40 2 3 use axum :: extract :: FromRef ; 4 use sqlx :: PgPool ; 5 6 use gitdot_core :: client ::{ Git2Client , GitHttpClientImpl , SupabaseClientImpl }; 7 use gitdot_core :: repository ::{ 8 OAuthRepositoryImpl , OrganizationRepositoryImpl , QuestionRepositoryImpl , 9 RepositoryRepositoryImpl , UserRepositoryImpl , 10 }; 2 3 use axum :: extract :: FromRef ; 4 use sqlx :: PgPool ; 5 6 use gitdot_core :: client ::{ Git2Client , GitHttpClientImpl }; 7 use gitdot_core :: repository ::{ 8 OAuthRepositoryImpl , OrganizationRepositoryImpl , QuestionRepositoryImpl , 9 RepositoryRepositoryImpl , UserRepositoryImpl , 10 };
30 31 impl AppState { 32 pub fn new ( settings : Arc < Settings >, pool : PgPool ) -> Self { 33 let git_client = Git2Client :: new ( settings .git_project_root. clone ()); 34 let git_http_client = GitHttpClientImpl :: new ( settings .git_project_root. clone ()); 35
47 question_repo . clone (), 48 user_repo . clone (), 49 )); 50 let user_service = Arc :: new ( UserServiceImpl :: new ( 51 user_repo . clone (), 52 repo_repo . clone (), 53 supabase_client . clone ( ) , 66 let status_code = match e { 67 UserError :: NotFound ( _ ) => StatusCode :: NOT_FOUND , 68 UserError :: InvalidUserName ( _ ) => StatusCode :: BAD_REQUEST , 69 UserError :: NameTaken ( _ ) => StatusCode :: CONFLICT , 70 UserError :: ReservedName ( _ ) => StatusCode :: CONFLICT , 71 UserError :: SupabaseError ( _ ) => StatusCode :: INTERNAL_SERVER_ERROR , 72 UserError :: DatabaseError ( _ ) => StatusCode :: INTERNAL_SERVER_ERROR , 73 }; 74 let response = AppResponse :: new ( 75 status_code , 66 let status_code = match e { 67 UserError :: NotFound ( _ ) => StatusCode :: NOT_FOUND , 68 UserError :: InvalidUserName ( _ ) => StatusCode :: BAD_REQUEST , 69 UserError :: NameTaken ( _ ) => StatusCode :: CONFLICT , 70 UserError :: ReservedName ( _ ) => StatusCode :: CONFLICT , .. 71 1 mod create_user ; 2 3 use chrono ::{ DateTime , Utc }; 4 use serde :: Serialize ; 5 use uuid :: Uuid ; 6 7 use gitdot_core :: dto :: UserResponse ; 8 9 pub use create_user :: CreateUserServerRequest ; 10 11 #[derive( Debug , Clone , PartialEq , Eq , Serialize )] 12 pub struct UserServerResponse { 13 pub id : Uuid , .. .. .. .. .. .. .. .. .. 1 use chrono ::{ DateTime , Utc }; 2 use serde :: Serialize ; 3 use uuid :: Uuid ; 4 13 use list_user_repositories ::list_user_repositories; 14 15 pub fn create_user_router () -> Router < AppState > { 16 Router :: new () 17 . route ( " /user " , get ( get_current_user ). post ( create_user ) ).. 18 . route ( " / user / { user_name } " , get ( get_user )) 19 . route ( 20 " /user/ { user_name } /repositories " , 21 get ( list_user_repositories ), 22 ) 16 use validate_name :: validate_name ; 17 18 pub fn create_user_router () -> Router < AppState > { 19 Router :: new () 20 . route ( " /user " , get ( get_current_user )) 21 . route ( " /user/ { user_name }" , get ( get_user 10 hex = { workspace = true } 11 nutype = { workspace = true } 12 git2 = { workspace = true } 13 rand = { workspace = true } 14 serde = { workspace = true } 15 serde_json = { workspace = true } 16 sha2 = { workspace = true } 17 sqlx = { workspace = true } 18 supabase-lib-rs = { workspace = true } 19 thiserror = { workspace = true } 20 tokio = { workspace = true } 21 uuid = { workspace = true } 22 10 hex = { workspace = true } 11 nutype = { workspace = true } 12 git2 = { workspace = true } 13 rand = { workspace = true } 14 serde = { workspace = true } .. .. .. .. 15 sha2 = { 1 mod git; 2 mod git_http; 3 mod supabase ; 4 5 pub use git ::{ Git2Client , GitClient }; 6 pub use git_http ::{ GitHttpClient , GitHttpClientImpl }; 7 pub use supabase :: { SupabaseClient , SupabaseClientImpl } ; 8 1 mod git; 2 mod git_http; .. .. .. .. .. 3 1 mod create_user ; 2 mod get_current_user; 3 mod get_user; 4 mod list_user_repositories; 5 6 use chrono ::{ DateTime , Utc }; 7 use uuid :: Uuid ; 8 9 use crate :: model :: User ; 10 11 pub use create_user :: CreateUserRequest ; .. .. 2 mod get_current_user; 3 mod get_user; 4 mod list_user_repositories; 5 .. .. .. .. .. .. .. .. .. .. .. 4 mod validate_name ; 14 pub use validate_name :: ValidateNameRequest ; 15 16 #[derive( Debug , Clone )] 1 use crate :: dto :: OwnerName ; 2 use crate :: error :: UserError ; 3 4 #[derive( Debug , Clone )] 5 pub struct CreateUserRequest { 6 pub name : OwnerName , 7 pub email : String , 8 pub password : String , 9 } 10 11 impl CreateUserRequest { 12 pub fn new ( name : & str , email : & str , password : & str ) -> Result < Self , UserError > { 13 Ok ( Self { 14 name : OwnerName :: try_new ( name ) 15 . map_err ( | e | UserError :: InvalidUserName ( e . to_string ()))?, 16 email : email . to_string ( ) , 1 use crate :: dto :: OwnerName ; 2 use crate :: error :: UserError ; 3 4 #[derive( Debug , Clone )] 5 pub struct ValidateNameRequest { .. .. 6 pub name : OwnerName , 7 } 8 9 impl ValidateNameRequest { 15 ReservedName ( String ), 16 17 #[error( " Database error: { 0 }" )] 18 DatabaseError (#[from] sqlx :: Error ), 19 20 # [ error ( " Supabase error: { 0 }" ) ] 21 SupabaseError ( # [ from ] supabase :: Error ) , 22 } 15 ReservedName ( String ), 16 17 #[error( " Database error: { 0 }" )] 18 DatabaseError (#[from] sqlx :: Error ), 19 } .. .. 20 2 3 use crate :: client :: { SupabaseClient , SupabaseClientImpl } ; 4 use crate :: dto ::{ 5 CreateUserRequest , GetCurrentUserRequest , GetUserRequest , ListUserRepositoriesRequest , 6 RepositoryResponse , UserResponse , 7 }; 8 use crate :: error :: UserError ; 9 use crate :: repository ::{ 10 RepositoryRepository , RepositoryRepositoryImpl , UserRepository , UserRepositoryImpl , 1 use async_trait ::async_trait; 2 3 use crate :: dto ::{ 4 GetCurrentUserRequest , GetUserRequest , ListUserRepositoriesRequest , RepositoryResponse , 5 UserResponse , ValidateNameRequest , 6 }; 7 use crate :: error :: UserError ; 8 use crate :: repository ::{ 9 RepositoryRepository , RepositoryRepositoryImpl , UserRepository
12 use crate :: util :: auth ::is_reserved_name; 13 14 #[async_trait] 15 pub trait UserService : Send + Sync + ' static { 16 async fn create_user (& self , request : CreateUserRequest ) -> Result <(), UserError >; 17 18 async fn get_current_user (
28 ) -> Result < Vec < RepositoryResponse >, UserError >; 29 } 30 31 #[derive( Debug , Clone )] 32 pub struct UserServiceImpl < U , R , S > 33 where 34 U : UserRepository , 35 R : RepositoryRepository ,
54 } 55 } 56 57 #[async_trait] 58 impl < U , R , S > UserService for UserServiceImpl < U , R , S > 59 where 60 U : UserRepository , 61 R : RepositoryRepository , 62
70 71 if self .user_repo. is_name_taken (& name ). await ? { 72 return Err ( UserError :: NameTaken ( name )); 73 } 74 75 // Once Supabase user is created, the Postgres trigger will then 76 // create the corresponding user row in users table. 77 self . supabase_client 78 6 createAnswer , 7 createAnswerComment , 8 createQuestion , 9 createQuestionComment , 10 createRepository , 11 createUser , .. 14 updateComment , 15 updateQuestion , 16 voteAnswer , 17 voteComment , 6 createAnswer , 7 createAnswerComment , 8 createQuestion , 9 createQuestionComment , 10 createRepository , .. 15 validateName , 16 voteAnswer , 17 voteComment , 18 voteQuestion , 19 } from " @/lib/dal " ;
39 const email = formData . get ( " email " ) as string ; 40 const name = formData . get ( " name " ) as string ; 41 const password = formData . get ( " password " ) as string ; 42 43 const result = await 1 import " server-only " ; 2 3 import { 4 type CreateUserRequest , 5 type UserRepositoriesResponse , 6 UserRepositoriesResponseSchema , 7 type UserResponse , 8 UserResponseSchema , 1 import " server-only " ; 2 3 import { .. 4 type UserRepositoriesResponse , 5 UserRepositoriesResponseSchema , 6 type UserResponse , 7 UserResponseSchema ,
9 } from " ../dto " ; 10 import { getSession } from " ../supabase " ; 11 import { authFetch , GITDOT_SERVER_URL , handleResponse , NotFound } from " ./util " ; 12 13 export type CreateUserResult = { success : true } | { error : string } ; 14 1 import { z } from " zod " ; 2 3 export const CreateUserRequestSchema = z . object ( { 4 name : z . string ( ) , 5 email : z . string ( ) , 6 password : z . string ( ) , 7 } ) ; 8 9 export type CreateUserRequest = z . infer < typeof CreateUserRequestSchema > ; 10 11 export const UserResponseSchema = z . object ( { 12 id : z . uuid (), 13 name : z . string (), 1 import { z } from " zod " ; 2 .. .. .. .. .. .. .. 3 export const UserResponseSchema = z . object ( { 4 id : z . uuid (), 5 name : z . string (), 6 1 # This file is automatically @generated by Cargo. 2 # It is not intended for manual editing. 3 version = 4 4 5 [[package]] 6 name = " adler2 " 7 version = " 2 . 0 . 1 " 8 source = " registry + https : / / github . com / rust - lang / crates . io - index " 9 checksum = " 320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa " 10 11 [ [ package ] ] 12 name = "aho-corasick" 13 version = "1.1.4" 14 source = "registry+https://github.com/rust-lang/crates.io-index" 15 checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 1 # This file is automatically @generated by Cargo. 2 # It is not intended for manual editing. 3 version = 4 4 5 [[package]] .. .. .. .. .. .. 6 name = "aho-corasick" 7 version = "1.1.4" 8 source = "registry+https://github.com/rust-lang/crates.io-index" 9 checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
16 dependencies = [ 17 "memchr", 18 ] 19 20 [[package]] 21 name = " aligned " 22 version = " 0 . 4 . 3 " 23 source = " registry + https : / /
105 version = "1.0.100" 106 source = "registry+https://github.com/rust-lang/crates.io-index" 107 checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" 108 109 [[package]] 110 name = " arbitrary " 111 version = " 1 . 4 . 2 " 112 source = " registry + https
157 dependencies = [ 158 "num-traits", 159 ] 160 161 [[package]] 162 name = " atomic - polyfill " 163 version = " 1 . 0 . 3 " 164 source = " registry + https :
178 version = "1.5.0" 179 source = "registry+https://github.com/rust-lang/crates.io-index" 180 checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 181 182 [[package]] 183 name = " av - scenechange " 184 version = " 0 . 14 . 1 " 185 source = " registry
308 "quote", 309 "syn", 310 ] 311 312 [[package]] 313 name = " base32 " 314 version = " 0 . 5 . 1 " 315 source = " registry + https : / /
332 version = "1.8.3" 333 source = "registry+https://github.com/rust-lang/crates.io-index" 334 checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" 335 336 [[package]] 337 name = " bit_field " 338 version = " 0 . 10 . 3 " 339 source = " registry + https
347 dependencies = [ 348 "serde_core", 349 ] 350 351 [[package]] 352 name = " bitstream - io " 353 version = " 4 . 9 . 0 " 354 source = " registry + https :
365 dependencies = [ 366 "generic-array", 367 ] 368 369 [[package]] 370 name = " built " 371 version = " 0 . 8 . 0 " 372 source = " registry + https : / /
494 dependencies = [ 495 "cc", 496 ] 497 498 [[package]] 499 name = " cobs " 500 version = " 0 . 3 . 0 " 501 source = " registry + https : / /
540 version = "0.9.6" 541 source = "registry+https://github.com/rust-lang/crates.io-index" 542 checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 543 544 [[package]] 545 name = " constant_time_eq " 546 version = " 0 . 3 . 1 " 547 source = " registry + https
581 version = "0.8.7" 582 source = "registry+https://github.com/rust-lang/crates.io-index" 583 checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 584 585 [[package]] 586 name = " core2 " 587 version = " 0 . 4 . 0 " 588 source = " registry + https
614 version = "2.4.0" 615 source = "registry+https://github.com/rust-lang/crates.io-index" 616 checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" 617 618 [[package]] 619 name = " crc32fast " 620 version = " 1 . 5 . 0 " 621 source = " registry + https
663 version = "0.8.21" 664 source = "registry+https://github.com/rust-lang/crates.io-index" 665 checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 666 667 [[package]] 668 name = " crunchy " 669 version = " 0 . 2 . 4 " 670 source = " registry + https
679 "generic-array", 680 "typenum", 681 ] 682 683 [[package]] 684 name = " darling " 685 version = " 0 . 21 . 3 " 686 source = " registry + https : / /
731 version = "0.5.5" 732 source = "registry+https://github.com/rust-lang/crates.io-index" 733 checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" 734 dependencies = [ 735 "powerfmt", 736 " serde_core " , 737 ] 738 739 [[package]] 740 name = "digest" 731 "js-sys", 732 "libc", 733 "wasi",
747 "crypto-common", 748 "subtle", 749 ] 750 751 [[package]] 752 name = " dirs " 753 version = " 5 . 0 . 1 " 754 source = " registry + https : / /
766 "cfg-if", 767 "dirs-sys-next", 768 ] 769 770 [[package]] 771 name = " dirs - sys " 772 version = " 0 . 4 . 1 " 773 source = " registry + https :
812 version = "1.0.5" 813 source = "registry+https://github.com/rust-lang/crates.io-index" 814 checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" 815 816 [[package]] 817 name = " dyn - clone " 818 version = " 1 . 0 . 20 " 819 source = " registry
827 dependencies = [ 828 "serde", 829 ] 830 831 [[package]] 832 name = " embedded - io " 833 version = " 0 . 4 . 0 " 834 source = " registry + https :
848 dependencies = [ 849 "cfg-if", 850 ] 851 852 [[package]] 853 name = " equator " 854 version = " 0 . 4 . 2 " 855 source = " registry + https : / /
906 "parking", 907 "pin-project-lite", 908 ] 909 910 [[package]] 911 name = " exr " 912 version = " 1 . 74 . 0 " 913 source = " registry + https : / /
1010 version = "1.3.0" 1011 source = "registry+https://github.com/rust-lang/crates.io-index" 1012 checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" 1013 1014 [[package]] 1015 name = " futures " 1016 version = " 0 . 3 . 31 " 1017 source = " registry + https
1069 version = "0.3.31" 1070 source = "registry+https://github.com/rust-lang/crates.io-index" 1071 checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 1072 1073 [[package]] 1074 name = " futures - macro " 1075 version = " 0 . 3 . 31 " 1076 source = " registry
1097 name = "futures-util" 1098 version = "0.3.31" 1099 source = "registry+https://github.com/rust-lang/crates.io-index" 1100 checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 1101 dependencies = [ 1102 " futures - channel " , 1103 "futures-core", 1104 "futures-io", 1105 " futures - macro " , 1106 "futures-sink", 1107
1180 "anyhow", 1181 "clap", 1182 "dirs-next", 1183 "gitdot_core", 1184 " reqwest 0 . 13 . 1 " , 1185 "serde", 1186 "serde_json", 1187 "tokio", 1188 "toml", 770 "anyhow", 771 "clap", 772 "dirs-next",
1194 name = "gitdot_core" 1195 version = "0.1.0" 1196 dependencies = [ 1197 "async-trait", 1198 " base64 0 . 22 . 1 " , 1199 "chrono", 1200 "git2", 1201 "hex", 1202 "nutype", 784 name = "gitdot_core" 785 version = "0.1.0" 786 dependencies = [
1216 version = "0.1.0" 1217 dependencies = [ 1218 "anyhow", 1219 "axum", 1220 " base64 0 . 22 . 1 " , 1221 "chrono", 1222 "dotenvy", 1223 "git2", 1224 "gitdot_core", 1225 "http", 1226 " jsonwebtoken 10 . 2
1248 "fnv", 1249 "futures-core", 1250 "futures-sink", 1251 "http", 1252 " indexmap 2 . 13 . 0 " , 1253 "slab", 1254 "tokio", 1255 "tokio-util", 1256 "tracing", 836 "fnv", 837 "futures-core", 838 "futures-sink",
1307 dependencies = [ 1308 "hashbrown 0.15.5", 1309 ] 1310 1311 [[package]] 1312 name = " heapless " 1313 version = " 0 . 7 . 17 " 1314 source = " registry + https : / /
1366 dependencies = [ 1367 "windows-sys 0.61.2", 1368 ] 1369 1370 [[package]] 1371 name = " hostname " 1372 version = " 0 . 4 . 2 " 1373 source = " registry + https : / /
1468 version = "0.1.19" 1469 source = "registry+https://github.com/rust-lang/crates.io-index" 1470 checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" 1471 dependencies = [ 1472 " base64 0 . 22 . 1 " , 1473 "bytes", 1474 "futures-channel", 1475 "futures-core", 1476 "futures-util", 998 version = "0.1.19" 999 source = "registry+https://github.com/rust-lang/crates.io-index"
1593 "zerotrie", 1594 "zerovec", 1595 ] 1596 1597 [[package]] 1598 name = " ident_case " 1599 version = " 1 . 0 . 1 " 1600 source = " registry + https : / /
1620 "icu_normalizer", 1621 "icu_properties", 1622 ] 1623 1624 [[package]] 1625 name = " image " 1626 version = " 0 . 25 . 9 " 1627 source = " registry + https : / /
1716 version = "1.70.2" 1717 source = "registry+https://github.com/rust-lang/crates.io-index" 1718 checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" 1719 1720 [[package]] 1721 name = " itertools " 1722 version = " 0 . 14 . 0 " 1723 source = " registry + https
1795 source = "registry+https://github.com/rust-lang/crates.io-index" 1796 checksum = "c76e1c7d7df3e34443b3621b459b066a7b79644f059fc8b2db7070c825fd417e" 1797 dependencies = [ 1798 "aws-lc-rs", 1799 " base64 0 . 22 . 1 " , 1800 "getrandom 0.2.17", 1801 "js-sys", 1802 "pem", 1803 "serde", 1231 source = "registry+https://github.com/rust-lang/crates.io-index" 1232 checksum = "c76e1c7d7df3e34443b3621b459b066a7b79644f059fc8b2db7070c825fd417e"
1835 dependencies = [ 1836 "spin", 1837 ] 1838 1839 [[package]] 1840 name = " lebe " 1841 version = " 0 . 5 . 3 " 1842 source = " registry + https : / /
1924 "pkg-config", 1925 "vcpkg", 1926 ] 1927 1928 [[package]] 1929 name = " linked - hash - map " 1930 version = " 0 . 5 . 6 " 1931 source = " registry +
1957 version = "0.4.29" 1958 source = "registry+https://github.com/rust-lang/crates.io-index" 1959 checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" 1960 1961 [[package]] 1962 name = " loop9 " 1963 version = " 0 . 1 . 5 " 1964 source = " registry + https
2006 version = "0.8.4" 2007 source = "registry+https://github.com/rust-lang/crates.io-index" 2008 checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" 2009 2010 [[package]] 2011 name = " maybe - rayon " 2012 version = " 0 . 1 . 1 " 2013 source = " registry
2032 version = "2.7.6" 2033 source = "registry+https://github.com/rust-lang/crates.io-index" 2034 checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" 2035 2036 [[package]] 2037 name = " memoffset " 2038 version = " 0 . 9 . 1 " 2039 source = " registry + https
2084 "wasi", 2085 "windows-sys 0.61.2", 2086 ] 2087 2088 [[package]] 2089 name = " moxcms " 2090 version = " 0 . 7 . 11 " 2091 source = " registry + https : / /
2179 version = "0.1.0" 2180 source = "registry+https://github.com/rust-lang/crates.io-index" 2181 checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 2182 2183 [[package]] 2184 name = " num - derive " 2185 version = " 0 . 4 . 2 " 2186 source = " registry
2210 "num-integer", 2211 "num-traits", 2212 ] 2213 2214 [[package]] 2215 name = " num - rational " 2216 version = " 0 . 4 . 2 " 2217 source = " registry + https :
2231 "autocfg", 2232 "libm", 2233 ] 2234 2235 [[package]] 2236 name = " num_cpus " 2237 version = " 1 . 17 . 0 " 2238 source = " registry + https : / /
2277 version = "1.70.2" 2278 source = "registry+https://github.com/rust-lang/crates.io-index" 2279 checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" 2280 2281 [[package]] 2282 name = " oncemutex " 2283 version = " 0 . 1 . 1 " 2284 source = " registry + https
2307 "pkg-config", 2308 "vcpkg", 2309 ] 2310 2311 [[package]] 2312 name = " option - ext " 2313 version = " 0 . 2 . 0 " 2314 source = " registry + https :
2360 version = "3.0.6" 2361 source = "registry+https://github.com/rust-lang/crates.io-index" 2362 checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" 2363 dependencies = [ 2364 " base64 0 . 22 . 1 " , 2365 "serde_core", 2366 ] 2367 2368 [[package]] 1591 version = "3.0.6" 1592 source = "registry+https://github.com/rust-lang/crates.io-index" 1593
2379 version = "2.3.2" 2380 source = "registry+https://github.com/rust-lang/crates.io-index" 2381 checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 2382 2383 [[package]] 2384 name = " phonenumber " 2385 version = " 0 . 3 . 9 + 9 . 0 . 21 " 2386 source
2438 version = "0.3.32" 2439 source = "registry+https://github.com/rust-lang/crates.io-index" 2440 checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 2441 2442 [[package]] 2443 name = " png " 2444 version = " 0 . 18 . 0 " 2445 source = " registry + https
2497 dependencies = [ 2498 "unicode-ident", 2499 ] 2500 2501 [[package]] 2502 name = " profiling " 2503 version = " 1 . 0 . 17 " 2504 source = " registry + https : / /
2688 dependencies = [ 2689 "getrandom 0.3.4", 2690 ] 2691 2692 [[package]] 2693 name = " rav1e " 2694 version = " 0 . 8 . 1 " 2695 source = " registry + https : / /
2827 checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" 2828 dependencies = [ 2829 "aho-corasick", 2830 "memchr", 2831 " regex - syntax 0 . 8 . 8 " , 2832 ] 2833 2834 [[package]] 2835 name = " regex - cache "
2900 version = "0.13.1" 2901 source = "registry+https://github.com/rust-lang/crates.io-index" 2902 checksum = "04e9018c9d814e5f30cc16a0f03271aeab3571e609612d9fe78c1aa8d11c2f62" 2903 dependencies = [ 2904 " base64 0 . 22 . 1 " , 2905 "bytes", 2906 "encoding_rs", 2907 "futures-core", 2908 "h2", 1864 version = "0.13.1" 1865 source = "registry+https://github.com/rust-lang/crates.io-index"
2934 "wasm-bindgen-futures", 2935 "web-sys", 2936 ] 2937 2938 [[package]] 2939 name = " rgb " 2940 version = " 0 . 8 . 52 " 2941 source = " registry + https : / /
3009 source = "registry+https://github.com/rust-lang/crates.io-index" 3010 checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" 3011 dependencies = [ 3012 "aws-lc-rs", 3013 "once_cell", 3014 " ring " , 3015 "rustls-pki-types", 3016 "rustls-webpki", 3017 "subtle", 3018 "zeroize", 3009 3010 [[package]] 3011 name = "version_check"
3108 dependencies = [ 3109 "windows-sys 0.61.2", 3110 ] 3111 3112 [[package]] 3113 name = " schemars " 3114 version = " 0 . 9 . 0 " 3115 source = " registry + https : / /
3242 "ryu", 3243 "serde", 3244 ] 3245 3246 [[package]] 3247 name = " serde_with " 3248 version = " 3 . 16 . 1 " 3249 source = " registry + https : / /
3420 version = "0.8.6" 3421 source = "registry+https://github.com/rust-lang/crates.io-index" 3422 checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" 3423 dependencies = [ 3424 " base64 0 . 22 . 1 " , 3425 "bytes", 3426 "chrono", 3427 "crc", 3428 "crossbeam-queue", 2307 version = "0.8.6" 2308 source = "registry+https://github.com/rust-lang/crates.io-index"
3433 "futures-io", 3434 "futures-util", 3435 "hashbrown 0.15.5", 3436 "hashlink", 3437 " indexmap 2 . 13 . 0 " , 3438 "log", 3439 "memchr", 3440 "once_cell", 3441 "percent-encoding", 2320 "futures-io", 2321 "futures-util", 2322 "hashbrown 0.15.5",
3495 source = "registry+https://github.com/rust-lang/crates.io-index" 3496 checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" 3497 dependencies = [ 3498 "atoi", 3499 " base64 0 . 22 . 1 " , 3500 "bitflags", 3501 "byteorder", 3502 "bytes", 3503 "chrono", 2382 source = "registry+https://github.com/rust-lang/crates.io-index" 2383 checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526"
3539 source = "registry+https://github.com/rust-lang/crates.io-index" 3540 checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" 3541 dependencies = [ 3542 "atoi", 3543 " base64 0 . 22 . 1 " , 3544 "bitflags", 3545 "byteorder", 3546 "chrono", 3547 "crc", 2426 source = "registry+https://github.com/rust-lang/crates.io-index" 2427 checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46"
3620 version = "0.11.1" 3621 source = "registry+https://github.com/rust-lang/crates.io-index" 3622 checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 3623 3624 [[package]] 3625 name = " strum " 3626 version = " 0 . 27 . 2 " 3627 source = " registry + https
3939 version = "0.9.11+spec-1.1.0" 3940 source = "registry+https://github.com/rust-lang/crates.io-index" 3941 checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46" 3942 dependencies = [ 3943 " indexmap 2 . 13 . 0 " , 3944 "serde_core", 3945 "serde_spanned", 3946 "toml_datetime", 3947 "toml_parser", 2751 version = "0.9.11+spec-1.1.0" 2752 source = "registry+https://github.com/rust-lang/crates.io-index"
3977 name = " totp - rs " 3978 version = " 5 . 7 . 0 " 3979 source = " registry + https : / / github . com / rust - lang / crates . io - index "
4113 name = " unicase " 4114 version = " 2 . 9 . 0 " 4115 source = " registry + https : / / github . com / rust - lang / crates . io - index " 4116
4206 name = " v_frame " 4207 version = " 0 . 3 . 9 " 4208 source = " registry + https : / / github . com / rust - lang / crates . io - index " 4209
4363 name = " webpki - roots " 4364 version = " 1 . 0 . 5 " 4365 source = " registry + https : / / github . com / rust - lang / crates . io - index "
4795 name = " y4m " 4796 version = " 0 . 8 . 0 " 4797 source = " registry + https : / / github . com / rust - lang / crates . io - index " 4798
4908 4909 [ [ package ] ] 4910 name = " zune - core " 4911 version = " 0 . 4 . 12 " 4912 source = " registry + https : / / github . com 13 rand = " 0.9.2 " 14 serde = { version = " 1.0 " , features = [ " derive " ] } 15 serde_json = " 1.0.149 " 16 sha2 = " 0.10.9 " 17 sqlx = { version = " 0.8.6 " , features = [ " runtime-tokio " , " postgres " , " uuid " , " chrono " ] } 18 supabase-lib-rs = " 0.5.3 " 19 thiserror = " 2.0.17 " 20 tokio = { version = " 1 " , features = [ " full " ] } 21 uuid = { version = " 1.19.0 " , features = [ " v4 " , " serde " ] } 22 13 rand = " 0.9.2 " 14 serde = { version = " 1.0 " , features = [ " derive " ] } 15 serde_json = " 1.0.149 " 16 sha2 = " 0.10.9 " 17 sqlx = { version = " 0.8.6 " , features = [ " runtime-tokio " , " postgres " , " uuid " , 7 8 # Posgres direct connection URI 9 DATABASE_URL =postgresql://postgres:[PASSWORD_HERE]@db.[PROJECT_ID_HERE].supabase.co:5432/postgres 10 11 # Supabase variables 12 SUPABASE_URL = " https : / / your - project . supabase . co " 13 SUPABASE_ANON_KEY = " your - anon - key " 14 SUPABASE_JWT_PUBLIC_KEY ="-----BEGIN PUBLIC KEY----- 15 ... 7 8 # Posgres direct connection URI 9 DATABASE_URL =postgresql://postgres:[PASSWORD_HERE]@db.[PROJECT_ID_HERE].supabase.co:5432/postgres 10 11 # Supabase public key 12 SUPABASE_JWT_PUBLIC_KEY ="-----BEGIN PUBLIC KEY----- 13 ... 14 ... 15 -----END PUBLIC KEY-----" github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
24 checksum = " ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685 "
25 dependencies = [
26 " as - slice " ,
27 ]
28
29 [ [ package ] ]
30 name = " aligned - vec "
31 version = " 0 . 6 . 4 "
32 source = " registry + https : / / github . com / rust - lang / crates . io - index "
33 checksum = " dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b "
34 dependencies = [
35 " equator " ,
36 ]
37
38 [ [ package ] ]
39 name = "allocator-api2"
40 version = "0.2.21"
41 source = "registry+https://github.com/rust-lang/crates.io-index"
42 checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
16 version = "0.2.21" 17 source = "registry+https://github.com/rust-lang/crates.io-index" 18 checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 19 20 [[package]] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 21 name = "android_system_properties" 22 version = "0.1.5" 23 source = "registry+https://github.com/rust-lang/crates.io-index" 24 checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" :
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
113 checksum = " c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1 "
114
115 [ [ package ] ]
116 name = " arg_enum_proc_macro "
117 version = " 0 . 3 . 4 "
118 source = " registry + https : / / github . com / rust - lang / crates . io - index "
119 checksum = " 0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea "
120 dependencies = [
121 " proc - macro2 " ,
122 " quote " ,
123 " syn " ,
124 ]
125
126 [ [ package ] ]
127 name = " arrayvec "
128 version = " 0 . 7 . 6 "
129 source = " registry + https : / / github . com / rust - lang / crates . io - index "
130 checksum = " 7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50 "
131
132 [ [ package ] ]
133 name = " as - slice "
134 version = " 0 . 2 . 1 "
135 source = " registry + https : / / github . com / rust - lang / crates . io - index "
136 checksum = " 516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516 "
137 dependencies = [
138 " stable_deref_trait " ,
139 ]
140
141 [ [ package ] ]
142 name = "async-trait"
143 version = "0.1.89"
144 source = "registry+https://github.com/rust-lang/crates.io-index"
145 checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
105 [[package]] 106 name = "atomic-waker" 107 version = "1.1.2" 108 source = "registry+https://github.com/rust-lang/crates.io-index" 109 checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 110 111 [[package]] 112 name = "autocfg" 113 version = "1.5.0" /
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
165 checksum = " 8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4 "
166 dependencies = [
167 " critical - section " ,
168 ]
169
170 [ [ package ] ]
171 name = "atomic-waker"
172 version = "1.1.2"
173 source = "registry+https://github.com/rust-lang/crates.io-index"
174 checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
157 "matchit", 158 "memchr", 159 "mime", 160 "percent-encoding", 161 "pin-project-lite", .. .. .. .. .. .. .. .. .. 162 "serde_core", 163 "serde_json", 164 "serde_path_to_error", 165 "serde_urlencoded", +
https
:
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
186 checksum = " 0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394 "
187 dependencies = [
188 " aligned " ,
189 " anyhow " ,
190 " arg_enum_proc_macro " ,
191 " arrayvec " ,
192 " log " ,
193 " num - rational " ,
194 " num - traits " ,
195 " pastey " ,
196 " rayon " ,
197 " thiserror 2 . 0 . 17 " ,
198 " v_frame " ,
199 " y4m " ,
200 ]
201
202 [ [ package ] ]
203 name = " av1 - grain "
204 version = " 0 . 2 . 5 "
205 source = " registry + https : / / github . com / rust - lang / crates . io - index "
206 checksum = " 8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8 "
207 dependencies = [
208 " anyhow " ,
209 " arrayvec " ,
210 " log " ,
211 " nom 8 . 0 . 0 " ,
212 " num - rational " ,
213 " v_frame " ,
214 ]
215
216 [ [ package ] ]
217 name = " avif - serialize "
218 version = " 0 . 8 . 6 "
219 source = " registry + https : / / github . com / rust - lang / crates . io - index "
220 checksum = " 47c8fbc0f831f4519fe8b810b6a7a91410ec83031b8233f730a0480029f6a23f "
221 dependencies = [
222 " arrayvec " ,
223 ]
224
225 [ [ package ] ]
226 name = "aws-lc-rs"
227 version = "1.15.3"
228 source = "registry+https://github.com/rust-lang/crates.io-index"
229 checksum = "e84ce723ab67259cfeb9877c6a639ee9eb7a27b28123abd71db7f0d5d0cc9d86"
178 checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" 179 dependencies = [ 180 "bytes", 181 "futures-core", 182 "http", .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 183 "http-body", 184 "http-body-util", 185 "mime", 186 "pin-project-lite", github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
316 checksum = " 022dfe9eb35f19ebbcb51e0b40a5ab759f46ad60cadf7297e0bd085afb50e076 "
317
318 [ [ package ] ]
319 name = "base64"
320 version = " 0 . 21 . 7 "
321 source = " registry + https : / / github . com / rust - lang / crates . io - index "
322 checksum = " 9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567 "
323
324 [ [ package ] ]
325 name = " base64 "
326 version = "0.22.1"
327 source = "registry+https://github.com/rust-lang/crates.io-index"
328 checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
329
308 version = "4.5.54" 309 source = "registry+https://github.com/rust-lang/crates.io-index" 310 checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" 311 dependencies = [ 312 "anstream", .. .. .. .. .. .. .. .. .. .. .. .. .. 313 "anstyle", 314 "clap_lex", 315 "strsim", 316 ] :
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
340 checksum = " 1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6 "
341
342 [ [ package ] ]
343 name = "bitflags"
344 version = "2.10.0"
345 source = "registry+https://github.com/rust-lang/crates.io-index"
346 checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
332 version = "0.7.7" 333 source = "registry+https://github.com/rust-lang/crates.io-index" 334 checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" 335 336 [[package]] .. .. .. .. .. .. 337 name = "cmake" 338 version = "0.1.57" 339 source = "registry+https://github.com/rust-lang/crates.io-index" 340 checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" /
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
355 checksum = " 60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757 "
356 dependencies = [
357 " core2 " ,
358 ]
359
360 [ [ package ] ]
361 name = "block-buffer"
362 version = "0.10.4"
363 source = "registry+https://github.com/rust-lang/crates.io-index"
364 checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
347 version = "1.0.4" 348 source = "registry+https://github.com/rust-lang/crates.io-index" 349 checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 350 351 [[package]] .. .. .. .. .. .. .. .. .. 352 name = "combine" 353 version = "4.6.7" 354 source = "registry+https://github.com/rust-lang/crates.io-index" 355 checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
373 checksum = " f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64 "
374
375 [ [ package ] ]
376 name = "bumpalo"
377 version = "3.19.1"
378 source = "registry+https://github.com/rust-lang/crates.io-index"
379 checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
380
381 [[package]]
382 name = " bytemuck "
383 version = " 1 . 25 . 0 "
384 source = " registry + https : / / github . com / rust - lang / crates . io - index "
385 checksum = " c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec "
386
387 [ [ package ] ]
388 name = "byteorder"
389 version = "1.5.0"
390 source = "registry+https://github.com/rust-lang/crates.io-index"
391 checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
392
393 [[package]]
394 name = " byteorder - lite "
395 version = " 0 . 1 . 0 "
396 source = " registry + https : / / github . com / rust - lang / crates . io - index "
397 checksum = " 8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495 "
398
399 [ [ package ] ]
400 name = "bytes"
401 version = "1.11.0"
402 source = "registry+https://github.com/rust-lang/crates.io-index"
403 checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3"
365 checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 366 dependencies = [ 367 "crossbeam-utils", 368 ] 369 .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 370 [[package]] 371 name = "const-oid" 372 version = "0.9.6" 373 source = "registry+https://github.com/rust-lang/crates.io-index" github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
502 checksum = " 0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1 "
503 dependencies = [
504 " thiserror 2 . 0 . 17 " ,
505 ]
506
507 [ [ package ] ]
508 name = " color_quant "
509 version = " 1 . 1 . 0 "
510 source = " registry + https : / / github . com / rust - lang / crates . io - index "
511 checksum = " 3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b "
512
513 [ [ package ] ]
514 name = "colorchoice"
515 version = "1.0.4"
516 source = "registry+https://github.com/rust-lang/crates.io-index"
517 checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
494 version = "2.0.0" 495 source = "registry+https://github.com/rust-lang/crates.io-index" 496 checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" 497 dependencies = [ 498 "cfg-if", .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 499 "dirs-sys-next", 500 ] 501 502 [[package]] :
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
548 checksum = " 7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6 "
549
550 [ [ package ] ]
551 name = "convert_case"
552 version = "0.6.0"
553 source = "registry+https://github.com/rust-lang/crates.io-index"
554 checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
540 checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 541 dependencies = [ 542 "serde", 543 ] 544 .. .. .. .. .. .. 545 [[package]] 546 name = "encoding_rs" 547 version = "0.8.35" 548 source = "registry+https://github.com/rust-lang/crates.io-index" :
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
589 checksum = " b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505 "
590 dependencies = [
591 " memchr " ,
592 ]
593
594 [ [ package ] ]
595 name = "cpufeatures"
596 version = "0.2.17"
597 source = "registry+https://github.com/rust-lang/crates.io-index"
598 checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
581 [[package]] 582 name = "event-listener" 583 version = "5.4.1" 584 source = "registry+https://github.com/rust-lang/crates.io-index" 585 checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" .. .. .. .. .. .. .. .. .. 586 dependencies = [ 587 "concurrent-queue", 588 "parking", 589 "pin-project-lite", :
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
622 checksum = " 9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511 "
623 dependencies = [
624 " cfg - if " ,
625 ]
626
627 [ [ package ] ]
628 name = " critical - section "
629 version = " 1 . 2 . 0 "
630 source = " registry + https : / / github . com / rust - lang / crates . io - index "
631 checksum = " 790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b "
632
633 [ [ package ] ]
634 name = " crossbeam - deque "
635 version = " 0 . 8 . 6 "
636 source = " registry + https : / / github . com / rust - lang / crates . io - index "
637 checksum = " 9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51 "
638 dependencies = [
639 " crossbeam - epoch " ,
640 " crossbeam - utils " ,
641 ]
642
643 [ [ package ] ]
644 name = " crossbeam - epoch "
645 version = " 0 . 9 . 18 "
646 source = " registry + https : / / github . com / rust - lang / crates . io - index "
647 checksum = " 5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e "
648 dependencies = [
649 " crossbeam - utils " ,
650 ]
651
652 [ [ package ] ]
653 name = "crossbeam-queue"
654 version = "0.3.12"
655 source = "registry+https://github.com/rust-lang/crates.io-index"
656 checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115"
614 615 [[package]] 616 name = "fnv" 617 version = "1.0.7" 618 source = "registry+https://github.com/rust-lang/crates.io-index" .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 619 checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 620 621 [[package]] 622 name = "foldhash" :
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
671 checksum = " 460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5 "
672
673 [ [ package ] ]
674 name = "crypto-common"
675 version = "0.1.7"
676 source = "registry+https://github.com/rust-lang/crates.io-index"
677 checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
663 dependencies = [ 664 "futures-core", 665 "futures-task", 666 "futures-util", 667 ] .. .. .. .. .. .. 668 669 [[package]] 670 name = "futures-intrusive" 671 version = "0.5.0" github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
687 checksum = " 9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0 "
688 dependencies = [
689 " darling_core " ,
690 " darling_macro " ,
691 ]
692
693 [ [ package ] ]
694 name = " darling_core "
695 version = " 0 . 21 . 3 "
696 source = " registry + https : / / github . com / rust - lang / crates . io - index "
697 checksum = " 1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4 "
698 dependencies = [
699 " fnv " ,
700 " ident_case " ,
701 " proc - macro2 " ,
702 " quote " ,
703 " strsim " ,
704 " syn " ,
705 ]
706
707 [ [ package ] ]
708 name = " darling_macro "
709 version = " 0 . 21 . 3 "
710 source = " registry + https : / / github . com / rust - lang / crates . io - index "
711 checksum = " d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81 "
712 dependencies = [
713 " darling_core " ,
714 " quote " ,
715 " syn " ,
716 ]
717
718 [ [ package ] ]
719 name = "der"
720 version = "0.7.10"
721 source = "registry+https://github.com/rust-lang/crates.io-index"
722 checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
679 680 [[package]] 681 name = "futures-io" 682 version = "0.3.31" 683 source = "registry+https://github.com/rust-lang/crates.io-index" .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 684 checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 685 686 [[package]] 687 name = "futures-sink" 734
"wasm-bindgen",
735 ]
..
736
737 [[package]]
738 name = "getrandom"
739 version = "0.3.4"
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
755 checksum = " 44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225 "
756 dependencies = [
757 " dirs - sys " ,
758 ]
759
760 [ [ package ] ]
761 name = "dirs-next"
762 version = "2.0.0"
763 source = "registry+https://github.com/rust-lang/crates.io-index"
764 checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
747 "wasip2", 748 "wasm-bindgen", 749 ] 750 751 [[package]] .. .. .. .. .. .. .. .. .. 752 name = "git2" 753 version = "0.20.3" 754 source = "registry+https://github.com/rust-lang/crates.io-index" 755 checksum = "3e2b37e2f62729cdada11f0e6b3b6fe383c69c29fc619e391223e12856af308c" /
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
774 checksum = " 520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c "
775 dependencies = [
776 " libc " ,
777 " option - ext " ,
778 " redox_users " ,
779 " windows - sys 0 . 48 . 0 " ,
780 ]
781
782 [ [ package ] ]
783 name = "dirs-sys-next"
784 version = "0.1.2"
785 source = "registry+https://github.com/rust-lang/crates.io-index"
786 checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
766 [[package]] 767 name = "gitdot_cli" 768 version = "0.1.0" 769 dependencies = [ 770 "anyhow", .. .. .. .. .. .. .. .. .. .. .. .. 771 "clap", 772 "dirs-next", 773 "gitdot_core", 774 " reqwest " , +
https
:
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
820 checksum = " d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555 "
821
822 [ [ package ] ]
823 name = "either"
824 version = "1.15.0"
825 source = "registry+https://github.com/rust-lang/crates.io-index"
826 checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
812 "gitdot_core", 813 "http", 814 " jsonwebtoken " , 815 "serde", 816 "serde_json", .. .. .. .. .. .. 817 "sqlx", 818 "tempfile", 819 "thiserror 2.0.17", 820 "tokio", /
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
835 checksum = " ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced "
836
837 [ [ package ] ]
838 name = " embedded - io "
839 version = " 0 . 6 . 1 "
840 source = " registry + https : / / github . com / rust - lang / crates . io - index "
841 checksum = " edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d "
842
843 [ [ package ] ]
844 name = "encoding_rs"
845 version = "0.8.35"
846 source = "registry+https://github.com/rust-lang/crates.io-index"
847 checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
827 828 [[package]] 829 name = "h2" 830 version = "0.4.13" 831 source = "registry+https://github.com/rust-lang/crates.io-index" .. .. .. .. .. .. .. .. .. .. .. .. 832 checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" 833 dependencies = [ 834 "atomic-waker", 835 "bytes", github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
856 checksum = " 4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc "
857 dependencies = [
858 " equator - macro " ,
859 ]
860
861 [ [ package ] ]
862 name = " equator - macro "
863 version = " 0 . 4 . 2 "
864 source = " registry + https : / / github . com / rust - lang / crates . io - index "
865 checksum = " 44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3 "
866 dependencies = [
867 " proc - macro2 " ,
868 " quote " ,
869 " syn " ,
870 ]
871
872 [ [ package ] ]
873 name = "equivalent"
874 version = "1.0.2"
875 source = "registry+https://github.com/rust-lang/crates.io-index"
876 checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
848 name = "hashbrown" 849 version = "0.15.5" 850 source = "registry+https://github.com/rust-lang/crates.io-index" 851 checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 852 dependencies = [ .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 853 "allocator-api2", 854 "equivalent", 855 "foldhash", 856 ] github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
914 checksum = " 4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be "
915 dependencies = [
916 " bit_field " ,
917 " half " ,
918 " lebe " ,
919 " miniz_oxide " ,
920 " rayon - core " ,
921 " smallvec " ,
922 " zune - inflate " ,
923 ]
924
925 [ [ package ] ]
926 name = "fastrand"
927 version = "2.3.0"
928 source = "registry+https://github.com/rust-lang/crates.io-index"
929 checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
930
931 [[package]]
932 name = " fax "
933 version = " 0 . 2 . 6 "
934 source = " registry + https : / / github . com / rust - lang / crates . io - index "
935 checksum = " f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab "
936 dependencies = [
937 " fax_derive " ,
938 ]
939
940 [ [ package ] ]
941 name = " fax_derive "
942 version = " 0 . 2 . 0 "
943 source = " registry + https : / / github . com / rust - lang / crates . io - index "
944 checksum = " a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d "
945 dependencies = [
946 " proc - macro2 " ,
947 " quote " ,
948 " syn " ,
949 ]
950
951 [ [ package ] ]
952 name = " fdeflate "
953 version = " 0 . 3 . 7 "
954 source = " registry + https : / / github . com / rust - lang / crates . io - index "
955 checksum = " 1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c "
956 dependencies = [
957 " simd - adler32 " ,
958 ]
959
960 [ [ package ] ]
961 name = "find-msvc-tools"
962 version = "0.1.7"
963 source = "registry+https://github.com/rust-lang/crates.io-index"
964 checksum = "f449e6c6c08c865631d4890cfacf252b3d396c9bcc83adb6623cdb02a8336c41"
965
966 [[package]]
967 name = " flate2 "
968 version = " 1 . 1 . 8 "
969 source = " registry + https : / / github . com / rust - lang / crates . io - index "
970 checksum = " b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369 "
971 dependencies = [
972 " crc32fast " ,
973 " miniz_oxide " ,
974 ]
975
976 [ [ package ] ]
977 name = "flume"
978 version = "0.11.1"
979 source = "registry+https://github.com/rust-lang/crates.io-index"
980 checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095"
906 source = "registry+https://github.com/rust-lang/crates.io-index" 907 checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" 908 dependencies = [ 909 "windows-sys 0.61.2", 910 ] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 911 912 [[package]] 913 name = "http" 914 version = "1.4.0" :
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
1018 checksum = " 65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876 "
1019 dependencies = [
1020 " futures - channel " ,
1021 " futures - core " ,
1022 " futures - executor " ,
1023 " futures - io " ,
1024 " futures - sink " ,
1025 " futures - task " ,
1026 " futures - util " ,
1027 ]
1028
1029 [ [ package ] ]
1030 name = "futures-channel"
1031 version = "0.3.31"
1032 source = "registry+https://github.com/rust-lang/crates.io-index"
1033 checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
1010 "ipnet", 1011 "libc", 1012 "percent-encoding", 1013 "pin-project-lite", 1014 "socket2", .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 1015 "system-configuration", 1016 "tokio", 1017 "tower-service", 1018 "tracing", +
https
:
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
1077 checksum = " 162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650 "
1078 dependencies = [
1079 " proc - macro2 " ,
1080 " quote " ,
1081 " syn " ,
1082 ]
1083
1084 [ [ package ] ]
1085 name = "futures-sink"
1086 version = "0.3.31"
1087 source = "registry+https://github.com/rust-lang/crates.io-index"
1088 checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
1069 "zerovec", 1070 ] 1071 1072 [[package]] 1073 name = "icu_normalizer" .. .. .. .. .. .. .. .. .. .. .. 1074 version = "2.1.1" 1075 source = "registry+https://github.com/rust-lang/crates.io-index" 1076 checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" 1077 dependencies = [ "futures-task",
1108 "memchr",
1109 "pin-project-lite",
1097 dependencies = [ 1098 "icu_collections", 1099 "icu_locale_core", 1100 "icu_properties_data", 1101 "icu_provider", .. .. .. .. 1102 "zerotrie", 1103 "zerovec", 1104 ] 1105 773
"gitdot_core",
774 " reqwest " ,
775 "serde",
776 "serde_json",
777 "tokio",
778 "toml",
787
"async-trait",
788 " base64 " ,
789 "chrono",
790 "git2",
791 "hex",
792 "nutype",
.
0
"
,
1227 "serde",
1228 "serde_json",
1229 "sqlx",
1230 "tempfile",
804 version = "0.1.0" 805 dependencies = [ 806 "anyhow", 807 "axum", 808 " base64 " , 809 "chrono", 810 "dotenvy", 811 "git2", 812 "gitdot_core", 813 "http", 814 " jsonwebtoken " , 815 "serde", 816 "serde_json", 817 "sqlx", 818 "tempfile", 839
"http",
840 " indexmap " ,
841 "slab",
842 "tokio",
843 "tokio-util",
844 "tracing",
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
1315 checksum = " cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f "
1316 dependencies = [
1317 " atomic - polyfill " ,
1318 " hash32 " ,
1319 " rustc_version " ,
1320 " serde " ,
1321 " spin " ,
1322 " stable_deref_trait " ,
1323 ]
1324
1325 [ [ package ] ]
1326 name = "heck"
1327 version = "0.5.0"
1328 source = "registry+https://github.com/rust-lang/crates.io-index"
1329 checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
1330
1331 [[package]]
1332 name = " hermit - abi "
1333 version = " 0 . 5 . 2 "
1334 source = " registry + https : / / github . com / rust - lang / crates . io - index "
1335 checksum = " fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c "
1336
1337 [ [ package ] ]
1338 name = "hex"
1339 version = "0.4.3"
1340 source = "registry+https://github.com/rust-lang/crates.io-index"
1341 checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
1307 "bitflags", 1308 "libc", 1309 "redox_syscall 0.7.0", 1310 ] 1311 .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 1312 [[package]] 1313 name = "libsqlite3-sys" 1314 version = "0.30.1" 1315 source = "registry+https://github.com/rust-lang/crates.io-index" github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
1374 checksum = " 617aaa3557aef3810a6369d0a99fac8a080891b68bd9f9812a1eeda0c0730cbd "
1375 dependencies = [
1376 " cfg - if " ,
1377 " libc " ,
1378 " windows - link " ,
1379 ]
1380
1381 [ [ package ] ]
1382 name = "http"
1383 version = "1.4.0"
1384 source = "registry+https://github.com/rust-lang/crates.io-index"
1385 checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
1366 "scopeguard", 1367 ] 1368 1369 [[package]] 1370 name = "log" .. .. .. .. .. .. .. .. .. .. .. 1371 version = "0.4.29" 1372 source = "registry+https://github.com/rust-lang/crates.io-index" 1373 checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" 1374 1000
checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f"
1001 dependencies = [
1002 " base64 " ,
1003 "bytes",
1004 "futures-channel",
1005 "futures-core",
1006 "futures-util",
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
1601 checksum = " b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39 "
1602
1603 [ [ package ] ]
1604 name = "idna"
1605 version = "1.1.0"
1606 source = "registry+https://github.com/rust-lang/crates.io-index"
1607 checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
1593 checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" 1594 dependencies = [ 1595 " base64 " , 1596 "serde_core", 1597 ] .. .. .. .. .. .. 1598 1599 [[package]] 1600 name = "pem-rfc7468" 1601 version = "0.7.0" github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
1628 checksum = " e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a "
1629 dependencies = [
1630 " bytemuck " ,
1631 " byteorder - lite " ,
1632 " color_quant " ,
1633 " exr " ,
1634 " gif " ,
1635 " image - webp " ,
1636 " moxcms " ,
1637 " num - traits " ,
1638 " png " ,
1639 " qoi " ,
1640 " ravif " ,
1641 " rayon " ,
1642 " rgb " ,
1643 " tiff " ,
1644 " zune - core 0 . 5 . 1 " ,
1645 " zune - jpeg 0 . 5 . 12 " ,
1646 ]
1647
1648 [ [ package ] ]
1649 name = " image - webp "
1650 version = " 0 . 2 . 4 "
1651 source = " registry + https : / / github . com / rust - lang / crates . io - index "
1652 checksum = " 525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3 "
1653 dependencies = [
1654 " byteorder - lite " ,
1655 " quick - error " ,
1656 ]
1657
1658 [ [ package ] ]
1659 name = " imgref "
1660 version = " 1 . 12 . 0 "
1661 source = " registry + https : / / github . com / rust - lang / crates . io - index "
1662 checksum = " e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8 "
1663
1664 [ [ package ] ]
1665 name = "indexmap"
1666 version = " 1 . 9 . 3 "
1667 source = " registry + https : / / github . com / rust - lang / crates . io - index "
1668 checksum = " bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99 "
1669 dependencies = [
1670 " autocfg " ,
1671 " hashbrown 0 . 12 . 3 " ,
1672 " serde " ,
1673 ]
1674
1675 [ [ package ] ]
1676 name = " indexmap "
1677 version = "2.13.0"
1678 source = "registry+https://github.com/rust-lang/crates.io-index"
1679 checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
1680 dependencies = [
1681 "equivalent",
1682 "hashbrown 0.16.1",
1683 " serde " ,
1684 " serde_core " ,
1685 ]
1686
1687 [[package]]
1688 name = " interpolate_name "
1689 version = " 0 . 2 . 4 "
1690 source = " registry + https : / / github . com / rust - lang / crates . io - index "
1691 checksum = " c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60 "
1692 dependencies = [
1693 " proc - macro2 " ,
1694 " quote " ,
1695 " syn " ,
1696 ]
1697
1698 [ [ package ] ]
1699 name = "ipnet"
1700 version = "2.11.0"
1701 source = "registry+https://github.com/rust-lang/crates.io-index"
1702 checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
1620 [[package]] 1621 name = "pin-utils" 1622 version = "0.1.0" 1623 source = "registry+https://github.com/rust-lang/crates.io-index" 1624 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 1625 1626 [[package]] 1627 name = "pkcs1" 1628 version = "0.7.5" :
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
1724 checksum = " 2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285 "
1725 dependencies = [
1726 " either " ,
1727 ]
1728
1729 [ [ package ] ]
1730 name = "itoa"
1731 version = "1.0.17"
1732 source = "registry+https://github.com/rust-lang/crates.io-index"
1733 checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
1716 "rand 0.9.2", 1717 "ring", 1718 "rustc-hash", 1719 "rustls", 1720 "rustls-pki-types", .. .. .. .. .. .. .. .. .. 1721 "slab", 1722 "thiserror 2.0.17", 1723 "tinyvec", 1724 "tracing", 1233 dependencies = [
1234 "aws-lc-rs",
1235 " base64 " ,
1236 "getrandom 0.2.17",
1237 "js-sys",
1238 "pem",
1239 "serde",
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
1843 checksum = " 7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8 "
1844
1845 [ [ package ] ]
1846 name = "libc"
1847 version = "0.2.180"
1848 source = "registry+https://github.com/rust-lang/crates.io-index"
1849 checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc"
1850
1851 [[package]]
1852 name = " libfuzzer - sys "
1853 version = " 0 . 4 . 10 "
1854 source = " registry + https : / / github . com / rust - lang / crates . io - index "
1855 checksum = " 5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404 "
1856 dependencies = [
1857 " arbitrary " ,
1858 " cc " ,
1859 ]
1860
1861 [ [ package ] ]
1862 name = "libgit2-sys"
1863 version = "0.18.3+1.9.2"
1864 source = "registry+https://github.com/rust-lang/crates.io-index"
1865 checksum = "c9b3acc4b91781bb0b3386669d325163746af5f6e4f73e6d2d630e09a35f3487"
1835 name = "redox_users" 1836 version = "0.4.6" 1837 source = "registry+https://github.com/rust-lang/crates.io-index" 1838 checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" 1839 dependencies = [ .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 1840 "getrandom 0.2.17", 1841 "libredox", 1842 "thiserror 1.0.69", 1843 ] https
:
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
1932 checksum = " 0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f "
1933
1934 [ [ package ] ]
1935 name = "linux-raw-sys"
1936 version = "0.11.0"
1937 source = "registry+https://github.com/rust-lang/crates.io-index"
1938 checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
1924 "num-bigint-dig", 1925 "num-integer", 1926 "num-traits", 1927 "pkcs1", 1928 "pkcs8", .. .. .. .. .. .. 1929 "rand_core 0.6.4", 1930 "signature", 1931 "spki", 1932 "subtle", :
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
1965 checksum = " 0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062 "
1966 dependencies = [
1967 " imgref " ,
1968 ]
1969
1970 [ [ package ] ]
1971 name = " lru - cache "
1972 version = " 0 . 1 . 2 "
1973 source = " registry + https : / / github . com / rust - lang / crates . io - index "
1974 checksum = " 31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c "
1975 dependencies = [
1976 " linked - hash - map " ,
1977 ]
1978
1979 [ [ package ] ]
1980 name = "lru-slab"
1981 version = "0.1.2"
1982 source = "registry+https://github.com/rust-lang/crates.io-index"
1983 checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
1984
1985 [[package]]
1986 name = " mac_address "
1987 version = " 1 . 1 . 8 "
1988 source = " registry + https : / / github . com / rust - lang / crates . io - index "
1989 checksum = " c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303 "
1990 dependencies = [
1991 " nix " ,
1992 " winapi " ,
1993 ]
1994
1995 [ [ package ] ]
1996 name = "matchers"
1997 version = "0.2.0"
1998 source = "registry+https://github.com/rust-lang/crates.io-index"
1999 checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
1957 "bitflags", 1958 "errno", 1959 "libc", 1960 "linux-raw-sys", 1961 "windows-sys 0.61.2", .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 1962 ] 1963 1964 [[package]] 1965 name = "rustls" +
https
:
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
2014 checksum = " 8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519 "
2015 dependencies = [
2016 " cfg - if " ,
2017 " rayon " ,
2018 ]
2019
2020 [ [ package ] ]
2021 name = "md-5"
2022 version = "0.10.6"
2023 source = "registry+https://github.com/rust-lang/crates.io-index"
2024 checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
2006 "core-foundation 0.10.1", 2007 "core-foundation-sys", 2008 "jni", 2009 "log", 2010 "once_cell", .. .. .. .. .. .. .. .. .. .. 2011 "rustls", 2012 "rustls-native-certs", 2013 "rustls-platform-verifier-android", 2014 "rustls-webpki", :
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
2040 checksum = " 488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a "
2041 dependencies = [
2042 " autocfg " ,
2043 ]
2044
2045 [ [ package ] ]
2046 name = "mime"
2047 version = "0.3.17"
2048 source = "registry+https://github.com/rust-lang/crates.io-index"
2049 checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
2050
2051 [[package]]
2052 name = " mime_guess "
2053 version = " 2 . 0 . 5 "
2054 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2055 checksum = " f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e "
2056 dependencies = [
2057 " mime " ,
2058 " unicase " ,
2059 ]
2060
2061 [ [ package ] ]
2062 name = " minimal - lexical "
2063 version = " 0 . 2 . 1 "
2064 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2065 checksum = " 68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a "
2066
2067 [ [ package ] ]
2068 name = " miniz_oxide "
2069 version = " 0 . 8 . 9 "
2070 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2071 checksum = " 1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316 "
2072 dependencies = [
2073 " adler2 " ,
2074 " simd - adler32 " ,
2075 ]
2076
2077 [ [ package ] ]
2078 name = "mio"
2079 version = "1.1.1"
2080 source = "registry+https://github.com/rust-lang/crates.io-index"
2081 checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc"
2032 dependencies = [ 2033 "aws-lc-rs", 2034 "ring", 2035 "rustls-pki-types", 2036 "untrusted 0.9.0", .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 2037 ] 2038 2039 [[package]] 2040 name = "rustversion" github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
2092 checksum = " ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97 "
2093 dependencies = [
2094 " num - traits " ,
2095 " pxfm " ,
2096 ]
2097
2098 [ [ package ] ]
2099 name = " new_debug_unreachable "
2100 version = " 1 . 0 . 6 "
2101 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2102 checksum = " 650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086 "
2103
2104 [ [ package ] ]
2105 name = " nix "
2106 version = " 0 . 29 . 0 "
2107 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2108 checksum = " 71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46 "
2109 dependencies = [
2110 " bitflags " ,
2111 " cfg - if " ,
2112 " cfg_aliases " ,
2113 " libc " ,
2114 " memoffset " ,
2115 ]
2116
2117 [ [ package ] ]
2118 name = " nom "
2119 version = " 7 . 1 . 3 "
2120 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2121 checksum = " d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a "
2122 dependencies = [
2123 " memchr " ,
2124 " minimal - lexical " ,
2125 ]
2126
2127 [ [ package ] ]
2128 name = " nom "
2129 version = " 8 . 0 . 0 "
2130 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2131 checksum = " df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405 "
2132 dependencies = [
2133 " memchr " ,
2134 ]
2135
2136 [ [ package ] ]
2137 name = " noop_proc_macro "
2138 version = " 0 . 3 . 0 "
2139 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2140 checksum = " 0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8 "
2141
2142 [ [ package ] ]
2143 name = "nu-ansi-term"
2144 version = "0.50.3"
2145 source = "registry+https://github.com/rust-lang/crates.io-index"
2146 checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
2084 "libc", 2085 "security-framework-sys", 2086 ] 2087 2088 [[package]] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 2089 name = "security-framework-sys" 2090 version = "2.15.0" 2091 source = "registry+https://github.com/rust-lang/crates.io-index" 2092 checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +
https
:
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
2187 checksum = " ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202 "
2188 dependencies = [
2189 " proc - macro2 " ,
2190 " quote " ,
2191 " syn " ,
2192 ]
2193
2194 [ [ package ] ]
2195 name = "num-integer"
2196 version = "0.1.46"
2197 source = "registry+https://github.com/rust-lang/crates.io-index"
2198 checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
2179 [[package]] 2180 name = "sha1" 2181 version = "0.10.6" 2182 source = "registry+https://github.com/rust-lang/crates.io-index" 2183 checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" .. .. .. .. .. .. .. .. .. .. .. 2184 dependencies = [ 2185 "cfg-if", 2186 "cpufeatures", 2187 "digest", /
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
2218 checksum = " f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824 "
2219 dependencies = [
2220 " num - bigint " ,
2221 " num - integer " ,
2222 " num - traits " ,
2223 ]
2224
2225 [ [ package ] ]
2226 name = "num-traits"
2227 version = "0.2.19"
2228 source = "registry+https://github.com/rust-lang/crates.io-index"
2229 checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
2210 [[package]] 2211 name = "shlex" 2212 version = "1.3.0" 2213 source = "registry+https://github.com/rust-lang/crates.io-index" 2214 checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" .. .. .. .. .. .. .. .. .. .. .. 2215 2216 [[package]] 2217 name = "signal-hook-registry" 2218 version = "1.4.8" github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
2239 checksum = " 91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b "
2240 dependencies = [
2241 " hermit - abi " ,
2242 " libc " ,
2243 ]
2244
2245 [ [ package ] ]
2246 name = "nutype"
2247 version = "0.6.2"
2248 source = "registry+https://github.com/rust-lang/crates.io-index"
2249 checksum = "70587a780088c67dad31bf722b875c5616096b4d8c0ded8b7de03294ffb9bbb5"
2231 dependencies = [ 2232 "digest", 2233 "rand_core 0.6.4", 2234 ] 2235 .. .. .. .. .. .. .. .. .. .. 2236 [[package]] 2237 name = "simple_asn1" 2238 version = "0.6.3" 2239 source = "registry+https://github.com/rust-lang/crates.io-index" :
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
2285 checksum = " 44d11de466f4a3006fe8a5e7ec84e93b79c70cb992ae0aa0eb631ad2df8abfe2 "
2286
2287 [ [ package ] ]
2288 name = "openssl-probe"
2289 version = "0.1.6"
2290 source = "registry+https://github.com/rust-lang/crates.io-index"
2291 checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
2277 checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 2278 dependencies = [ 2279 "lock_api", 2280 ] 2281 .. .. .. .. .. .. 2282 [[package]] 2283 name = "spki" 2284 version = "0.7.3" 2285 source = "registry+https://github.com/rust-lang/crates.io-index" /
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
2315 checksum = " 04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d "
2316
2317 [ [ package ] ]
2318 name = "parking"
2319 version = "2.2.1"
2320 source = "registry+https://github.com/rust-lang/crates.io-index"
2321 checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
2307 version = "0.8.6" 2308 source = "registry+https://github.com/rust-lang/crates.io-index" 2309 checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" 2310 dependencies = [ 2311 " base64 " , .. .. .. .. .. .. 2312 "bytes", 2313 "chrono", 2314 "crc", 2315 "crossbeam-queue", checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be"
1594 dependencies = [
1595 " base64 " ,
1596 "serde_core",
1597 ]
1598
1599 [[package]]
=
"
registry
+
https
:
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
2387 checksum = " 9114f9c1683dd09c5f4fa024c89fdad783eaae21d3d52dd23ddaaffa29ffb168 "
2388 dependencies = [
2389 " either " ,
2390 " fnv " ,
2391 " nom 7 . 1 . 3 " ,
2392 " once_cell " ,
2393 " postcard " ,
2394 " quick - xml " ,
2395 " regex " ,
2396 " regex - cache " ,
2397 " serde " ,
2398 " serde_derive " ,
2399 " strum " ,
2400 " thiserror 2 . 0 . 17 " ,
2401 ]
2402
2403 [ [ package ] ]
2404 name = "pin-project-lite"
2405 version = "0.2.16"
2406 source = "registry+https://github.com/rust-lang/crates.io-index"
2407 checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
2379 [[package]] 2380 name = "sqlx-mysql" 2381 version = "0.8.6" 2382 source = "registry+https://github.com/rust-lang/crates.io-index" 2383 checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 2384 dependencies = [ 2385 "atoi", 2386 " base64 " , 2387 "bitflags", :
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
2446 checksum = " 97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0 "
2447 dependencies = [
2448 " bitflags " ,
2449 " crc32fast " ,
2450 " fdeflate " ,
2451 " flate2 " ,
2452 " miniz_oxide " ,
2453 ]
2454
2455 [ [ package ] ]
2456 name = " postcard "
2457 version = " 1 . 1 . 3 "
2458 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2459 checksum = " 6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24 "
2460 dependencies = [
2461 " cobs " ,
2462 " embedded - io 0 . 4 . 0 " ,
2463 " embedded - io 0 . 6 . 1 " ,
2464 " heapless " ,
2465 " serde " ,
2466 ]
2467
2468 [ [ package ] ]
2469 name = "potential_utf"
2470 version = "0.1.4"
2471 source = "registry+https://github.com/rust-lang/crates.io-index"
2472 checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
2438 "futures-core", 2439 "futures-util", 2440 "hex", 2441 "hkdf", 2442 "hmac", .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 2443 "home", 2444 "itoa", 2445 "log", 2446 "md-5", github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
2505 checksum = " 3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773 "
2506 dependencies = [
2507 " profiling - procmacros " ,
2508 ]
2509
2510 [ [ package ] ]
2511 name = " profiling - procmacros "
2512 version = " 1 . 0 . 17 "
2513 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2514 checksum = " 52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b "
2515 dependencies = [
2516 " quote " ,
2517 " syn " ,
2518 ]
2519
2520 [ [ package ] ]
2521 name = " pxfm "
2522 version = " 0 . 1 . 27 "
2523 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2524 checksum = " 7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8 "
2525 dependencies = [
2526 " num - traits " ,
2527 ]
2528
2529 [ [ package ] ]
2530 name = " qoi "
2531 version = " 0 . 4 . 1 "
2532 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2533 checksum = " 7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001 "
2534 dependencies = [
2535 " bytemuck " ,
2536 ]
2537
2538 [ [ package ] ]
2539 name = " qrcode "
2540 version = " 0 . 14 . 1 "
2541 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2542 checksum = " d68782463e408eb1e668cf6152704bd856c78c5b6417adaee3203d8f4c1fc9ec "
2543 dependencies = [
2544 " image " ,
2545 ]
2546
2547 [ [ package ] ]
2548 name = " quick - error "
2549 version = " 2 . 0 . 1 "
2550 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2551 checksum = " a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3 "
2552
2553 [ [ package ] ]
2554 name = " quick - xml "
2555 version = " 0 . 38 . 4 "
2556 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2557 checksum = " b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c "
2558 dependencies = [
2559 " memchr " ,
2560 ]
2561
2562 [ [ package ] ]
2563 name = "quinn"
2564 version = "0.11.9"
2565 source = "registry+https://github.com/rust-lang/crates.io-index"
2566 checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
2497 source = "registry+https://github.com/rust-lang/crates.io-index" 2498 checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" 2499 dependencies = [ 2500 "unicode-bidi", 2501 "unicode-normalization", .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 2502 "unicode-properties", 2503 ] 2504 2505 [[package]] github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
2696 checksum = " 43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b "
2697 dependencies = [
2698 " aligned - vec " ,
2699 " arbitrary " ,
2700 " arg_enum_proc_macro " ,
2701 " arrayvec " ,
2702 " av - scenechange " ,
2703 " av1 - grain " ,
2704 " bitstream - io " ,
2705 " built " ,
2706 " cfg - if " ,
2707 " interpolate_name " ,
2708 " itertools " ,
2709 " libc " ,
2710 " libfuzzer - sys " ,
2711 " log " ,
2712 " maybe - rayon " ,
2713 " new_debug_unreachable " ,
2714 " noop_proc_macro " ,
2715 " num - derive " ,
2716 " num - traits " ,
2717 " paste " ,
2718 " profiling " ,
2719 " rand 0 . 9 . 2 " ,
2720 " rand_chacha 0 . 9 . 0 " ,
2721 " simd_helpers " ,
2722 " thiserror 2 . 0 . 17 " ,
2723 " v_frame " ,
2724 " wasm - bindgen " ,
2725 ]
2726
2727 [ [ package ] ]
2728 name = " ravif "
2729 version = " 0 . 12 . 0 "
2730 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2731 checksum = " ef69c1990ceef18a116855938e74793a5f7496ee907562bd0857b6ac734ab285 "
2732 dependencies = [
2733 " avif - serialize " ,
2734 " imgref " ,
2735 " loop9 " ,
2736 " quick - error " ,
2737 " rav1e " ,
2738 " rayon " ,
2739 " rgb " ,
2740 ]
2741
2742 [ [ package ] ]
2743 name = " rayon "
2744 version = " 1 . 11 . 0 "
2745 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2746 checksum = " 368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f "
2747 dependencies = [
2748 " either " ,
2749 " rayon - core " ,
2750 ]
2751
2752 [ [ package ] ]
2753 name = " rayon - core "
2754 version = " 1 . 13 . 0 "
2755 source = " registry + https : / / github . com / rust - lang / crates . io - index "
2756 checksum = " 22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91 "
2757 dependencies = [
2758 " crossbeam - deque " ,
2759 " crossbeam - utils " ,
2760 ]
2761
2762 [ [ package ] ]
2763 name = "redox_syscall"
2764 version = "0.5.18"
2765 source = "registry+https://github.com/rust-lang/crates.io-index"
2766 checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
2688 name = "tokio" 2689 version = "1.49.0" 2690 source = "registry+https://github.com/rust-lang/crates.io-index" 2691 checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" 2692 dependencies = [ .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 2693 "bytes", 2694 "libc", 2695 "mio", 2696 "parking_lot", 1849 checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
1850 dependencies = [
1851 "aho-corasick",
1852 "memchr",
1853 " regex - syntax " ,
1854 ]
1855
1856 [[package]]
1857 name = "regex-syntax"
1866
checksum = "04e9018c9d814e5f30cc16a0f03271aeab3571e609612d9fe78c1aa8d11c2f62"
1867 dependencies = [
1868 " base64 " ,
1869 "bytes",
1870 "encoding_rs",
1871 "futures-core",
1872 "h2",
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
2942 checksum = " 0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce "
2943
2944 [ [ package ] ]
2945 name = "ring"
2946 version = "0.17.14"
2947 source = "registry+https://github.com/rust-lang/crates.io-index"
2948 checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
2934 version = "0.1.4" 2935 source = "registry+https://github.com/rust-lang/crates.io-index" 2936 checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" 2937 2938 [[package]] .. .. .. .. .. .. 2939 name = "unicode-segmentation" 2940 version = "1.12.0" 2941 source = "registry+https://github.com/rust-lang/crates.io-index" 2942 checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 3012 version = "0.9.5"
3013 source = "registry+https://github.com/rust-lang/crates.io-index"
..
3014 checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
3015
3016 [[package]]
3017 name = "walkdir"
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
3116 checksum = " 4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f "
3117 dependencies = [
3118 " dyn - clone " ,
3119 " ref - cast " ,
3120 " serde " ,
3121 " serde_json " ,
3122 ]
3123
3124 [ [ package ] ]
3125 name = " schemars "
3126 version = " 1 . 2 . 1 "
3127 source = " registry + https : / / github . com / rust - lang / crates . io - index "
3128 checksum = " a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc "
3129 dependencies = [
3130 " dyn - clone " ,
3131 " ref - cast " ,
3132 " serde " ,
3133 " serde_json " ,
3134 ]
3135
3136 [ [ package ] ]
3137 name = "scopeguard"
3138 version = "1.2.0"
3139 source = "registry+https://github.com/rust-lang/crates.io-index"
3140 checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
3108 version = "0.2.108" 3109 source = "registry+https://github.com/rust-lang/crates.io-index" 3110 checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" 3111 dependencies = [ 3112 "unicode-ident", .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 3113 ] 3114 3115 [[package]] 3116 name = "web-sys" github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
3250 checksum = " 4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7 "
3251 dependencies = [
3252 " base64 0 . 22 . 1 " ,
3253 " chrono " ,
3254 " hex " ,
3255 " indexmap 1 . 9 . 3 " ,
3256 " indexmap 2 . 13 . 0 " ,
3257 " schemars 0 . 9 . 0 " ,
3258 " schemars 1 . 2 . 1 " ,
3259 " serde_core " ,
3260 " serde_json " ,
3261 " serde_with_macros " ,
3262 " time " ,
3263 ]
3264
3265 [ [ package ] ]
3266 name = " serde_with_macros "
3267 version = " 3 . 16 . 1 "
3268 source = " registry + https : / / github . com / rust - lang / crates . io - index "
3269 checksum = " 52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c "
3270 dependencies = [
3271 " darling " ,
3272 " proc - macro2 " ,
3273 " quote " ,
3274 " syn " ,
3275 ]
3276
3277 [ [ package ] ]
3278 name = "sha1"
3279 version = "0.10.6"
3280 source = "registry+https://github.com/rust-lang/crates.io-index"
3281 checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
3242 dependencies = [ 3243 "windows-link", 3244 ] 3245 3246 [[package]] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 3247 name = "windows-strings" 3248 version = "0.5.1" 3249 source = "registry+https://github.com/rust-lang/crates.io-index" 3250 checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" 2309
checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6"
2310 dependencies = [
2311 " base64 " ,
2312 "bytes",
2313 "chrono",
2314 "crc",
2315 "crossbeam-queue",
2323
"hashlink",
2324 " indexmap " ,
2325 "log",
2326 "memchr",
2327 "once_cell",
2328 "percent-encoding",
2384 dependencies = [
2385 "atoi",
2386 " base64 " ,
2387 "bitflags",
2388 "byteorder",
2389 "bytes",
2390 "chrono",
2428 dependencies = [
2429 "atoi",
2430 " base64 " ,
2431 "bitflags",
2432 "byteorder",
2433 "chrono",
2434 "crc",
:
/
/
github
.
com
/
rust
-
lang
/
crates
.
io
-
index
"
3628 checksum = " af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf "
3629 dependencies = [
3630 " strum_macros " ,
3631 ]
3632
3633 [ [ package ] ]
3634 name = " strum_macros "
3635 version = " 0 . 27 . 2 "
3636 source = " registry + https : / / github . com / rust - lang / crates . io - index "
3637 checksum = " 7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7 "
3638 dependencies = [
3639 " heck " ,
3640 " proc - macro2 " ,
3641 " quote " ,
3642 " syn " ,
3643 ]
3644
3645 [ [ package ] ]
3646 name = "subtle"
3647 version = "2.6.1"
3648 source = "registry+https://github.com/rust-lang/crates.io-index"
3649 checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
3650
3651 [[package]]
3652 name = " supabase - lib - rs "
3653 version = " 0 . 5 . 3 "
3654 source = " registry + https : / / github . com / rust - lang / crates . io - index "
3655 checksum = " fdf658e1a59788dbbc4449d306f28f0fdb9992bbace0f0539d4d48ee40e0da77 "
3656 dependencies = [
3657 " anyhow " ,
3658 " async - trait " ,
3659 " base32 " ,
3660 " base64 0 . 21 . 7 " ,
3661 " bytes " ,
3662 " chrono " ,
3663 " dirs " ,
3664 " futures " ,
3665 " getrandom 0 . 2 . 17 " ,
3666 " hostname " ,
3667 " image " ,
3668 " indexmap 2 . 13 . 0 " ,
3669 " jsonwebtoken 9 . 3 . 1 " ,
3670 " mac_address " ,
3671 " num_cpus " ,
3672 " parking_lot " ,
3673 " phonenumber " ,
3674 " qrcode " ,
3675 " reqwest 0 . 12 . 28 " ,
3676 " serde " ,
3677 " serde_json " ,
3678 " serde_with " ,
3679 " thiserror 1 . 0 . 69 " ,
3680 " tokio " ,
3681 " tokio - stream " ,
3682 " tokio - util " ,
3683 " totp - rs " ,
3684 " tracing " ,
3685 " tracing - subscriber " ,
3686 " url " ,
3687 " urlencoding " ,
3688 " uuid " ,
3689 ]
3690
3691 [ [ package ] ]
3692 name = "syn"
3693 version = "2.0.114"
3694 source = "registry+https://github.com/rust-lang/crates.io-index"
3695 checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a"
3620 "quote", 3621 "syn", 3622 "synstructure", 3623 ] 3624 .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 3625 [[package]] 3626 name = "zeroize" 3627 version = "1.8.2" 3628 source = "registry+https://github.com/rust-lang/crates.io-index" 2753 checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46"
2754 dependencies = [
2755 " indexmap " ,
2756 "serde_core",
2757 "serde_spanned",
2758 "toml_datetime",
2759 "toml_parser",
3980
checksum = " f124352108f58ef88299e909f6e9470f1cdc8d2a1397963901b4a6366206bf72 "
3981 dependencies = [
3982 " base32 " ,
3983 " constant_time_eq " ,
3984 " hmac " ,
3985 " sha1 " ,
3986 " sha2 " ,
3987 ]
3988
3989 [ [ package ] ]
.. .. .. .. .. .. .. .. .. .. .. .. .. checksum = " dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142 "
4117
4118 [ [ package ] ]
checksum = " 666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2 "
4210 dependencies = [
4211 " aligned - vec " ,
4212 " num - traits " ,
4213 " wasm - bindgen " ,
4214 ]
4215
4216 [ [ package ] ]
4366 checksum = " 12bed680863276c63889429bfd6cab3b99943659923822de1c8a39c49e4d722c "
4367 dependencies = [
4368 " rustls - pki - types " ,
4369 ]
4370
4371 [ [ package ] ]
4372 name = " weezl "
4373 version = " 0 . 1 . 12 "
4374 source = " registry + https : / / github . com / rust - lang / crates . io - index "
4375 checksum = " a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88 "
4376
4377 [ [ package ] ]
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. checksum = " 7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448 "
4799
4800 [ [ package ] ]
/
rust
-
lang
/
crates
.
io
-
index
"
4913 checksum = " 3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a "
4914
4915 [ [ package ] ]
4916 name = " zune - core "
4917 version = " 0 . 5 . 1 "
4918 source = " registry + https : / / github . com / rust - lang / crates . io - index "
4919 checksum = " cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9 "
4920
4921 [ [ package ] ]
4922 name = " zune - inflate "
4923 version = " 0 . 2 . 54 "
4924 source = " registry + https : / / github . com / rust - lang / crates . io - index "
4925 checksum = " 73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02 "
4926 dependencies = [
4927 " simd - adler32 " ,
4928 ]
4929
4930 [ [ package ] ]
4931 name = " zune - jpeg "
4932 version = " 0 . 4 . 21 "
4933 source = " registry + https : / / github . com / rust - lang / crates . io - index "
4934 checksum = " 29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713 "
4935 dependencies = [
4936 " zune - core 0 . 4 . 12 " ,
4937 ]
4938
4939 [ [ package ] ]
4940 name = " zune - jpeg "
4941 version = " 0 . 5 . 12 "
4942 source = " registry + https : / / github . com / rust - lang / crates . io - index "
4943 checksum = " 410e9ecef634c709e3831c2cfdb8d9c32164fae1c67496d5b68fff728eec37fe "
4944 dependencies = [
4945 " zune - core 0 . 5 . 1 " ,
4946 ]
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. "
chrono
"
] }
..
18 thiserror = " 2.0.17 "
19 tokio = { version = " 1 " , features = [ " full " ] }
20 uuid = { version = " 1.19.0 " , features = [ " v4 " , " serde " ] }
21
let
supabase_client
=
36 SupabaseClientImpl :: new ( & settings . supabase_url , & settings . supabase_anon_key ) ;
37
38 let org_repo = OrganizationRepositoryImpl :: new ( pool . clone ());
39 let repo_repo = RepositoryRepositoryImpl :: new ( pool . clone ());
40 let user_repo = UserRepositoryImpl :: new ( pool . clone ());
30 31 impl AppState { 32 pub fn new ( settings : Arc < Settings >, pool : PgPool ) -> Self { 33 let git_client = Git2Client :: new ( settings .git_project_root. clone ()); 34 let git_http_client = GitHttpClientImpl :: new ( settings .git_project_root. clone ()); .. .. 35 36 let org_repo = OrganizationRepositoryImpl :: new ( pool . clone ()); 37 let repo_repo = RepositoryRepositoryImpl :: new ( pool . clone ()); 38 let user_repo = UserRepositoryImpl :: new ( pool . clone ()); 54 ));
55 let org_service = Arc :: new ( OrganizationServiceImpl :: new (
56 org_repo . clone (),
57 user_repo . clone (),
47 )); 48 let user_service = Arc :: new ( UserServiceImpl :: new ( user_repo . clone (), repo_repo . clone ())); 49 let org_service = Arc :: new ( OrganizationServiceImpl :: new ( 50 org_repo . clone (), 51 user_repo . clone (), .. .. 52 repo_repo . clone (), 53 )); 54 let repo_service = Arc :: new ( RepositoryServiceImpl :: new ( 55 git_client . clone (), UserError
::
DatabaseError
(
_
) =>
StatusCode
::
INTERNAL_SERVER_ERROR
,
72 };
73 let response = AppResponse :: new (
74 status_code ,
)
)
22 . route ( " / user / { user_name } / validate " , post ( validate_name ))
23 . route (
24 " /user/ { user_name } /repositories " ,
25 get ( list_user_repositories ),
26 )
workspace
=
true
}
16 sqlx = { workspace = true }
17 thiserror = { workspace = true }
18 tokio = { workspace = true }
17 pub struct UserResponse {
18 pub id : Uuid ,
10 pub fn new ( name : & str ) -> Result < Self , UserError > {
11 Ok ( Self {
12 name : OwnerName :: try_new ( name )
13 . map_err ( | e | UserError :: InvalidUserName ( e . to_string ()))?,
14 })
,
UserRepositoryImpl
,
19
&
self
,
20 request : GetCurrentUserRequest ,
11 use crate :: util :: auth ::is_reserved_name; 12 13 #[async_trait] 14 pub trait UserService : Send + Sync + ' static { 15 async fn validate_name (& self , request : ValidateNameRequest ) -> Result <(), UserError >; 16 17 async fn get_current_user ( 18 & self , 19 request : GetCurrentUserRequest , 36
S
:
SupabaseClient
,
37 {
38 user_repo : U ,
39 repo_repo : R ,
40 supabase_client : S ,
41 }
42
43 impl UserServiceImpl < UserRepositoryImpl , RepositoryRepositoryImpl , SupabaseClientImpl > {
44 pub fn new (
45 user_repo : UserRepositoryImpl ,
46 repo_repo : RepositoryRepositoryImpl ,
47 supabase_client : SupabaseClientImpl ,
27 ) -> Result < Vec < RepositoryResponse >, UserError >; 28 } 29 30 #[derive( Debug , Clone )] 31 pub struct UserServiceImpl < U , R > .. .. 32 where 33 U : UserRepository , 34 R : RepositoryRepository , 35 { 36 user_repo : U , 37 repo_repo : R , 38 } 39 40 impl UserServiceImpl < UserRepositoryImpl , RepositoryRepositoryImpl > { 41 pub fn new ( user_repo : UserRepositoryImpl , repo_repo : RepositoryRepositoryImpl ) -> Self { 42 Self { 43 user_repo , 44 repo_repo , S
:
SupabaseClient
,
63 {
64 async fn create_user (& self , request : CreateUserRequest ) -> Result <(), UserError > {
65 let name = request .name. to_string ();
66
67 if is_reserved_name (& name ) {
68 return Err ( UserError :: ReservedName ( name ));
46 } 47 } 48 49 #[async_trait] 50 impl < U , R > UserService for UserServiceImpl < U , R > .. 51 where 52 U : UserRepository , 53 R : RepositoryRepository , 54 { 55 async fn validate_name (& self , request : ValidateNameRequest ) -> Result <(), UserError > { 56 let name = request .name. to_string (); 57 58 if is_reserved_name (& name ) { 59 return Err ( UserError :: ReservedName ( name )); .
create_user
( &
name
, &
request
. email , &
request
. password )
79 . await ? ;
80
81 Ok (())
82 }
83
70 & self , 71 request : GetCurrentUserRequest , 72 ) -> Result < UserResponse , UserError > { 73 let user = self 74 .user_repo .. .. .. .. .. 75 . get_by_id ( request .user_id) 76 . await ? 77 . ok_or_else ( || UserError :: NotFound ( request .user_id. to_string ()))?; 78 Ok ( user . into ()) createUser
(
{
name
,
email
,
password
}
);
44 if ( " error " in result ) {
45 return { success : false , error : result . error } ;
46 }
47
48 return { success : true } ;
49 }
39 const email = formData . get ( " email " ) as string ; 40 const name = formData . get ( " name " ) as string ; 41 const password = formData . get ( " password " ) as string ; 42 43 const validateResult = await validateName ( name ); 44 if ( " error " in validateResult ) { 45 return { success : false , error : validateResult . error } ; 46 } 47 48 const supabase = await createSupabaseClient ( ) ; 49 const { error } = await supabase . auth . signUp ( { 15 export async function createUser (
16 request : CreateUserRequest ,
17 ): Promise < CreateUserResult > {
18 const response = await fetch ( ` $ { GITDOT_SERVER_URL } / user ` , {
..
19 method : " POST " ,
20 headers : { " Content-Type " : " application/json " } ,
21 body : JSON . stringify ( request ) ,
22 } );
23
24 if ( ! response . ok ) {
25 try {
26 const data = await response . json ();
27 return { error : data . message ?? " Failed to create user " } ;
28 } catch {
29 return { error : " Failed to create user " } ;
30 }
31 }
32
33 return { success : true } ;
8 } from " ../dto " ; 9 import { getSession } from " ../supabase " ; 10 import { authFetch , GITDOT_SERVER_URL , handleResponse , NotFound } from " ./util " ; 11 12 export type ValidateNameResult = { success : true } | { error : string } ; 13 14 export async function validateName ( name : string ): Promise < ValidateNameResult > { .. .. 15 const response = await fetch ( 16 ` $ { GITDOT_SERVER_URL } / user / $ { encodeURIComponent ( name ) } / validate ` , 17 { method : " POST " } , .. .. 18 ); 19 20 if ( ! response . ok ) { 21 try { 22 const data = await response . json (); 23 return { error : data . message ?? " Invalid name " } ; 24 } catch { 25 return { error : " Invalid name " } ; 26 } 27 } 28 29 return { success : true } ; email
:
z
.
string
(),