mirror of
https://github.com/YGGverse/titanite.git
synced 2026-03-31 17:15:33 +00:00
return HashMap for Titan header options, but replace with IndexMap to keep original arguments order
This commit is contained in:
parent
3cb2296784
commit
1a1c0a9898
2 changed files with 9 additions and 3 deletions
|
|
@ -11,5 +11,6 @@ repository = "https://github.com/YGGverse/titanite"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = "1.0.96"
|
anyhow = "1.0.96"
|
||||||
|
indexmap = "2.7.1"
|
||||||
regex = "1.11.1"
|
regex = "1.11.1"
|
||||||
url = "2.5.4"
|
url = "2.5.4"
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ pub struct Header {
|
||||||
pub url: String,
|
pub url: String,
|
||||||
pub mime: Option<String>,
|
pub mime: Option<String>,
|
||||||
pub token: Option<String>,
|
pub token: Option<String>,
|
||||||
pub options: Option<Vec<(String, String)>>,
|
pub options: Option<IndexMap<String, String>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Header {
|
impl Header {
|
||||||
|
|
@ -33,11 +33,15 @@ impl Header {
|
||||||
options: match Regex::new(r"\?(.*)$")?.captures(header) {
|
options: match Regex::new(r"\?(.*)$")?.captures(header) {
|
||||||
Some(c) => match c.get(1) {
|
Some(c) => match c.get(1) {
|
||||||
Some(v) => {
|
Some(v) => {
|
||||||
let mut options = Vec::new();
|
let mut options = IndexMap::new();
|
||||||
for option in v.as_str().split("&") {
|
for option in v.as_str().split("&") {
|
||||||
let kv: Vec<&str> = option.split('=').collect();
|
let kv: Vec<&str> = option.split('=').collect();
|
||||||
if kv.len() == 2 {
|
if kv.len() == 2 {
|
||||||
options.push((kv[0].to_string(), kv[1].to_string()))
|
if let Some(v) =
|
||||||
|
options.insert(kv[0].to_string(), kv[1].to_string())
|
||||||
|
{
|
||||||
|
bail!("Option key duplicate with value: {v}")
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
bail!("Invalid options format")
|
bail!("Invalid options format")
|
||||||
}
|
}
|
||||||
|
|
@ -97,4 +101,5 @@ fn test() {
|
||||||
}
|
}
|
||||||
|
|
||||||
use anyhow::{bail, Result};
|
use anyhow::{bail, Result};
|
||||||
|
use indexmap::IndexMap;
|
||||||
use std::str::from_utf8;
|
use std::str::from_utf8;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue