types.rs (1718B)
1 /* 2 This file is part of TALER 3 Copyright (C) 2024, 2025, 2026 Taler Systems SA 4 5 TALER is free software; you can redistribute it and/or modify it under the 6 terms of the GNU Affero General Public License as published by the Free Software 7 Foundation; either version 3, or (at your option) any later version. 8 9 TALER is distributed in the hope that it will be useful, but WITHOUT ANY 10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 11 A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. 12 13 You should have received a copy of the GNU Affero General Public License along with 14 TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> 15 */ 16 17 pub mod amount; 18 pub mod base32; 19 pub mod iban; 20 pub mod payto; 21 pub mod timestamp; 22 pub mod utils; 23 24 use url::Url; 25 26 pub fn url(url: &str) -> Url { 27 url.parse().expect("Invalid url") 28 } 29 30 pub fn validate_base_url(url: &Url) -> Result<(), String> { 31 if url.scheme() != "http" && url.scheme() != "https" { 32 Err(format!( 33 "only 'http' and 'https' are accepted for baseURL got '{}''", 34 url.scheme() 35 )) 36 } else if !url.has_host() { 37 Err(format!("missing host in baseURL got '{url}'")) 38 } else if url.query().is_some() { 39 Err(format!( 40 "require no query in baseURL got '{}'", 41 url.query().unwrap() 42 )) 43 } else if url.fragment().is_some() { 44 Err(format!( 45 "require no fragment in baseURL got '{}'", 46 url.fragment().unwrap() 47 )) 48 } else if !url.path().ends_with('/') { 49 Err(format!("baseURL path must end with / got '{}'", url.path())) 50 } else { 51 Ok(()) 52 } 53 }