feat: 添加 Security Token 配置项,更新签名算法
This commit is contained in:
62
src/api.rs
62
src/api.rs
@@ -12,11 +12,17 @@ pub struct VolcClient {
|
|||||||
client: Client,
|
client: Client,
|
||||||
access_key_id: String,
|
access_key_id: String,
|
||||||
secret_access_key: String,
|
secret_access_key: String,
|
||||||
|
security_token: Option<String>,
|
||||||
endpoint: String,
|
endpoint: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl VolcClient {
|
impl VolcClient {
|
||||||
pub fn new(access_key_id: String, secret_access_key: String, endpoint: String) -> Self {
|
pub fn new(
|
||||||
|
access_key_id: String,
|
||||||
|
secret_access_key: String,
|
||||||
|
security_token: Option<String>,
|
||||||
|
endpoint: String,
|
||||||
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
client: Client::builder()
|
client: Client::builder()
|
||||||
.danger_accept_invalid_certs(false)
|
.danger_accept_invalid_certs(false)
|
||||||
@@ -24,6 +30,7 @@ impl VolcClient {
|
|||||||
.unwrap_or_default(),
|
.unwrap_or_default(),
|
||||||
access_key_id,
|
access_key_id,
|
||||||
secret_access_key,
|
secret_access_key,
|
||||||
|
security_token,
|
||||||
endpoint,
|
endpoint,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -45,7 +52,7 @@ impl VolcClient {
|
|||||||
params.insert("Action", "DescribeRegions");
|
params.insert("Action", "DescribeRegions");
|
||||||
params.insert("Version", "2020-04-01");
|
params.insert("Version", "2020-04-01");
|
||||||
|
|
||||||
let resp = self.send_request(params).await?;
|
let resp = self.send_request("cn-beijing", params).await?;
|
||||||
let regions = resp["Result"]
|
let regions = resp["Result"]
|
||||||
.as_array()
|
.as_array()
|
||||||
.map(|arr| {
|
.map(|arr| {
|
||||||
@@ -79,7 +86,7 @@ impl VolcClient {
|
|||||||
params.insert("RegionId", region);
|
params.insert("RegionId", region);
|
||||||
params.insert("MaxResults", "100");
|
params.insert("MaxResults", "100");
|
||||||
|
|
||||||
let resp = self.send_request(params).await?;
|
let resp = self.send_request(region, params).await?;
|
||||||
let instances = resp["Result"]["Instances"]
|
let instances = resp["Result"]["Instances"]
|
||||||
.as_array()
|
.as_array()
|
||||||
.or_else(|| resp["Instances"].as_array())
|
.or_else(|| resp["Instances"].as_array())
|
||||||
@@ -152,24 +159,42 @@ impl VolcClient {
|
|||||||
params.insert("Version", "2020-04-01");
|
params.insert("Version", "2020-04-01");
|
||||||
params.insert("InstanceId", instance_id);
|
params.insert("InstanceId", instance_id);
|
||||||
|
|
||||||
let _resp = self.send_request(params).await?;
|
let _resp = self.send_request("cn-beijing", params).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn send_request(
|
async fn send_request(
|
||||||
&self,
|
&self,
|
||||||
|
region: &str,
|
||||||
mut params: HashMap<&str, &str>,
|
mut params: HashMap<&str, &str>,
|
||||||
) -> Result<serde_json::Value, String> {
|
) -> Result<serde_json::Value, String> {
|
||||||
params.insert("AccessKeyId", &self.access_key_id);
|
params.insert("AccessKeyId", &self.access_key_id);
|
||||||
params.insert("SignatureVersion", "1.0");
|
|
||||||
params.insert("SignatureMethod", "HMAC-SHA256");
|
|
||||||
|
|
||||||
let timestamp = Utc::now().format("%Y-%m-%dT%H:%M:%SZ").to_string();
|
let timestamp = Utc::now();
|
||||||
params.insert("Timestamp", ×tamp);
|
let date = timestamp.format("%Y%m%dT%H%M%SZ").to_string();
|
||||||
|
let date_short = timestamp.format("%Y%m%d").to_string();
|
||||||
|
|
||||||
let string_to_sign = Self::build_string_to_sign(¶ms);
|
params.insert("X-Algorithm", "HMAC-SHA256");
|
||||||
|
let credential = format!(
|
||||||
|
"{}/{}{}/ecs/request",
|
||||||
|
self.access_key_id, date_short, region
|
||||||
|
);
|
||||||
|
params.insert("X-Credential", &credential);
|
||||||
|
params.insert("X-Date", &date);
|
||||||
|
params.insert("X-Expires", "3600");
|
||||||
|
params.insert("X-NotSignBody", "1");
|
||||||
|
|
||||||
|
if let Some(ref token) = self.security_token {
|
||||||
|
params.insert("X-Security-Token", token);
|
||||||
|
}
|
||||||
|
|
||||||
|
params.insert("X-SignedHeaders", "");
|
||||||
|
params.insert("X-SignedQueries", "Action;Version;X-Algorithm;X-Credential;X-Date;X-Expires;X-NotSignBody;X-Security-Token;X-SignedHeaders;X-SignedQueries");
|
||||||
|
|
||||||
|
let signed_queries = "Action;Version;X-Algorithm;X-Credential;X-Date;X-Expires;X-NotSignBody;X-Security-Token;X-SignedHeaders;X-SignedQueries";
|
||||||
|
let string_to_sign = Self::build_string_to_sign(¶ms, signed_queries, &date, region);
|
||||||
let signature = self.sign(&string_to_sign);
|
let signature = self.sign(&string_to_sign);
|
||||||
params.insert("Signature", &signature);
|
params.insert("X-Signature", &signature);
|
||||||
|
|
||||||
let url = format!("https://{}/", self.endpoint);
|
let url = format!("https://{}/", self.endpoint);
|
||||||
let resp = self
|
let resp = self
|
||||||
@@ -207,7 +232,12 @@ impl VolcClient {
|
|||||||
Ok(body)
|
Ok(body)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_string_to_sign(params: &HashMap<&str, &str>) -> String {
|
fn build_string_to_sign(
|
||||||
|
params: &HashMap<&str, &str>,
|
||||||
|
signed_queries: &str,
|
||||||
|
date: &str,
|
||||||
|
region: &str,
|
||||||
|
) -> String {
|
||||||
let mut keys: Vec<&str> = params.keys().copied().collect();
|
let mut keys: Vec<&str> = params.keys().copied().collect();
|
||||||
keys.sort();
|
keys.sort();
|
||||||
let query: Vec<String> = keys
|
let query: Vec<String> = keys
|
||||||
@@ -220,7 +250,13 @@ impl VolcClient {
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
format!("GET\n/\n{}\n", query.join("&"))
|
let canonical = format!("GET\n/\n{}\n", query.join("&"));
|
||||||
|
let _signed = format!("X-SignedQueries={}", signed_queries);
|
||||||
|
let _canonical_headers = format!("X-Date={}", date);
|
||||||
|
format!(
|
||||||
|
"HMAC-SHA256\n{}\n{}\n{}\n{}",
|
||||||
|
date, region, "ecs", canonical
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sign(&self, string_to_sign: &str) -> String {
|
fn sign(&self, string_to_sign: &str) -> String {
|
||||||
@@ -234,4 +270,4 @@ impl VolcClient {
|
|||||||
|
|
||||||
fn url_encode(s: &str) -> String {
|
fn url_encode(s: &str) -> String {
|
||||||
urlencoding::encode(s).into_owned()
|
urlencoding::encode(s).into_owned()
|
||||||
}
|
}
|
||||||
16
src/app.rs
16
src/app.rs
@@ -16,6 +16,7 @@ pub struct VolcManagerApp {
|
|||||||
rx: Option<mpsc::Receiver<ApiMessage>>,
|
rx: Option<mpsc::Receiver<ApiMessage>>,
|
||||||
config_ak: String,
|
config_ak: String,
|
||||||
config_sk: String,
|
config_sk: String,
|
||||||
|
config_token: String,
|
||||||
config_endpoint: String,
|
config_endpoint: String,
|
||||||
status_message: Option<(String, std::time::Instant)>,
|
status_message: Option<(String, std::time::Instant)>,
|
||||||
}
|
}
|
||||||
@@ -26,6 +27,7 @@ impl VolcManagerApp {
|
|||||||
let config = load_config().unwrap_or_else(|_| AppConfig {
|
let config = load_config().unwrap_or_else(|_| AppConfig {
|
||||||
access_key_id: String::new(),
|
access_key_id: String::new(),
|
||||||
secret_access_key: String::new(),
|
secret_access_key: String::new(),
|
||||||
|
security_token: None,
|
||||||
endpoint: "ecs.volcengineapi.com".to_string(),
|
endpoint: "ecs.volcengineapi.com".to_string(),
|
||||||
});
|
});
|
||||||
let show_config_dialog = !config.is_configured();
|
let show_config_dialog = !config.is_configured();
|
||||||
@@ -40,6 +42,7 @@ impl VolcManagerApp {
|
|||||||
rx: None,
|
rx: None,
|
||||||
config_ak: String::new(),
|
config_ak: String::new(),
|
||||||
config_sk: String::new(),
|
config_sk: String::new(),
|
||||||
|
config_token: String::new(),
|
||||||
config_endpoint: "ecs.volcengineapi.com".to_string(),
|
config_endpoint: "ecs.volcengineapi.com".to_string(),
|
||||||
status_message: None,
|
status_message: None,
|
||||||
}
|
}
|
||||||
@@ -60,6 +63,7 @@ impl VolcManagerApp {
|
|||||||
let client = VolcClient::new(
|
let client = VolcClient::new(
|
||||||
config.access_key_id.clone(),
|
config.access_key_id.clone(),
|
||||||
config.secret_access_key.clone(),
|
config.secret_access_key.clone(),
|
||||||
|
config.security_token.clone(),
|
||||||
config.endpoint.clone(),
|
config.endpoint.clone(),
|
||||||
);
|
);
|
||||||
match client.list_instances().await {
|
match client.list_instances().await {
|
||||||
@@ -109,6 +113,7 @@ impl VolcManagerApp {
|
|||||||
fn open_config_dialog(&mut self) {
|
fn open_config_dialog(&mut self) {
|
||||||
self.config_ak = self.config.access_key_id.clone();
|
self.config_ak = self.config.access_key_id.clone();
|
||||||
self.config_sk = self.config.secret_access_key.clone();
|
self.config_sk = self.config.secret_access_key.clone();
|
||||||
|
self.config_token = self.config.security_token.clone().unwrap_or_default();
|
||||||
self.config_endpoint = self.config.endpoint.clone();
|
self.config_endpoint = self.config.endpoint.clone();
|
||||||
self.show_config_dialog = true;
|
self.show_config_dialog = true;
|
||||||
}
|
}
|
||||||
@@ -116,6 +121,11 @@ impl VolcManagerApp {
|
|||||||
fn save_config_dialog(&mut self) {
|
fn save_config_dialog(&mut self) {
|
||||||
self.config.access_key_id = self.config_ak.clone();
|
self.config.access_key_id = self.config_ak.clone();
|
||||||
self.config.secret_access_key = self.config_sk.clone();
|
self.config.secret_access_key = self.config_sk.clone();
|
||||||
|
self.config.security_token = if self.config_token.is_empty() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(self.config_token.clone())
|
||||||
|
};
|
||||||
self.config.endpoint = self.config_endpoint.clone();
|
self.config.endpoint = self.config_endpoint.clone();
|
||||||
if let Err(e) = save_config(&self.config) {
|
if let Err(e) = save_config(&self.config) {
|
||||||
self.app_state = AppState::Error(format!("保存配置失败: {}", e));
|
self.app_state = AppState::Error(format!("保存配置失败: {}", e));
|
||||||
@@ -186,7 +196,7 @@ impl eframe::App for VolcManagerApp {
|
|||||||
egui::Window::new("配置")
|
egui::Window::new("配置")
|
||||||
.collapsible(false)
|
.collapsible(false)
|
||||||
.resizable(false)
|
.resizable(false)
|
||||||
.fixed_size([400.0, 250.0])
|
.fixed_size([450.0, 320.0])
|
||||||
.anchor(egui::Align2::CENTER_CENTER, [0.0, 0.0])
|
.anchor(egui::Align2::CENTER_CENTER, [0.0, 0.0])
|
||||||
.show(ctx, |ui| {
|
.show(ctx, |ui| {
|
||||||
ui.vertical(|ui| {
|
ui.vertical(|ui| {
|
||||||
@@ -196,6 +206,9 @@ impl eframe::App for VolcManagerApp {
|
|||||||
ui.label("Secret Access Key:");
|
ui.label("Secret Access Key:");
|
||||||
ui.text_edit_singleline(&mut self.config_sk);
|
ui.text_edit_singleline(&mut self.config_sk);
|
||||||
ui.add_space(8.0);
|
ui.add_space(8.0);
|
||||||
|
ui.label("Security Token (可选):");
|
||||||
|
ui.text_edit_singleline(&mut self.config_token);
|
||||||
|
ui.add_space(8.0);
|
||||||
ui.label("Endpoint:");
|
ui.label("Endpoint:");
|
||||||
ui.text_edit_singleline(&mut self.config_endpoint);
|
ui.text_edit_singleline(&mut self.config_endpoint);
|
||||||
ui.add_space(16.0);
|
ui.add_space(16.0);
|
||||||
@@ -238,6 +251,7 @@ impl eframe::App for VolcManagerApp {
|
|||||||
let client = VolcClient::new(
|
let client = VolcClient::new(
|
||||||
config.access_key_id.clone(),
|
config.access_key_id.clone(),
|
||||||
config.secret_access_key.clone(),
|
config.secret_access_key.clone(),
|
||||||
|
config.security_token.clone(),
|
||||||
config.endpoint.clone(),
|
config.endpoint.clone(),
|
||||||
);
|
);
|
||||||
match client.reboot_instance(&instance_id).await {
|
match client.reboot_instance(&instance_id).await {
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ use std::path::PathBuf;
|
|||||||
pub struct AppConfig {
|
pub struct AppConfig {
|
||||||
pub access_key_id: String,
|
pub access_key_id: String,
|
||||||
pub secret_access_key: String,
|
pub secret_access_key: String,
|
||||||
|
pub security_token: Option<String>,
|
||||||
#[serde(default = "default_endpoint")]
|
#[serde(default = "default_endpoint")]
|
||||||
pub endpoint: String,
|
pub endpoint: String,
|
||||||
}
|
}
|
||||||
@@ -37,6 +38,7 @@ pub fn load_config() -> Result<AppConfig, io::Error> {
|
|||||||
return Ok(AppConfig {
|
return Ok(AppConfig {
|
||||||
access_key_id: String::new(),
|
access_key_id: String::new(),
|
||||||
secret_access_key: String::new(),
|
secret_access_key: String::new(),
|
||||||
|
security_token: None,
|
||||||
endpoint: default_endpoint(),
|
endpoint: default_endpoint(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -46,6 +48,7 @@ pub fn load_config() -> Result<AppConfig, io::Error> {
|
|||||||
return Ok(AppConfig {
|
return Ok(AppConfig {
|
||||||
access_key_id: String::new(),
|
access_key_id: String::new(),
|
||||||
secret_access_key: String::new(),
|
secret_access_key: String::new(),
|
||||||
|
security_token: None,
|
||||||
endpoint: default_endpoint(),
|
endpoint: default_endpoint(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
1
target/.rustc_info.json
Normal file
1
target/.rustc_info.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"rustc_fingerprint":3436846264670622634,"outputs":{"6027984484328994041":{"success":true,"status":"","code":0,"stdout":"___.exe\nlib___.rlib\n___.dll\n___.dll\nlib___.a\n___.dll\nC:\\Users\\xiaji\\.rustup\\toolchains\\stable-x86_64-pc-windows-gnu\noff\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"windows\"\ntarget_feature=\"cmpxchg16b\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"windows\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"pc\"\nwindows\n","stderr":""},"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.94.1 (e408947bf 2026-03-25)\nbinary: rustc\ncommit-hash: e408947bfd200af42db322daf0fadfe7e26d3bd1\ncommit-date: 2026-03-25\nhost: x86_64-pc-windows-gnu\nrelease: 1.94.1\nLLVM version: 21.1.8\n","stderr":""},"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___.exe\nlib___.rlib\n___.dll\n___.dll\nlib___.a\n___.dll\nC:\\Users\\xiaji\\.rustup\\toolchains\\stable-x86_64-pc-windows-gnu\noff\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"windows\"\ntarget_feature=\"cmpxchg16b\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"windows\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"pc\"\nwindows\n","stderr":""}},"successes":{}}
|
||||||
3
target/CACHEDIR.TAG
Normal file
3
target/CACHEDIR.TAG
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Signature: 8a477f597d28d172789f06886806bc55
|
||||||
|
# This file is a cache directory tag created by cargo.
|
||||||
|
# For information about cache directory tags see https://bford.info/cachedir/
|
||||||
0
target/release/.cargo-lock
Normal file
0
target/release/.cargo-lock
Normal file
@@ -0,0 +1 @@
|
|||||||
|
dacf53bd7082af4b
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[\"no-rng\", \"std\"]","declared_features":"[\"atomic-polyfill\", \"compile-time-rng\", \"const-random\", \"default\", \"getrandom\", \"nightly-arm-aes\", \"no-rng\", \"runtime-rng\", \"serde\", \"std\"]","target":17883862002600103897,"profile":17984201634715228204,"path":16984176770274195302,"deps":[[5398981501050481332,"version_check",false,4878342317923567443]],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\ahash-ac6e2b975586a166\\dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
566252737e74f016
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[]","target":6962977057026645649,"profile":17984201634715228204,"path":18198931462569545615,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\autocfg-72e26fdd3d2ed410\\dep-lib-autocfg","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
36a2c4a634d6f925
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[]","target":11496395835559002815,"profile":17984201634715228204,"path":13971219645035430286,"deps":[[4289358735036141001,"proc_macro2",false,1782743344548705437],[10420560437213941093,"syn",false,14903620658101358608],[13111758008314797071,"quote",false,8517727265981585499]],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\bytemuck_derive-7d44c0d420da4de6\\dep-lib-bytemuck_derive","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
BIN
target/release/.fingerprint/cc-330ce21183a542ec/dep-lib-cc
Normal file
BIN
target/release/.fingerprint/cc-330ce21183a542ec/dep-lib-cc
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
1
target/release/.fingerprint/cc-330ce21183a542ec/lib-cc
Normal file
1
target/release/.fingerprint/cc-330ce21183a542ec/lib-cc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
41bfa47aee3c9185
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[\"jobserver\", \"parallel\"]","target":11042037588551934598,"profile":12001510762593995098,"path":12958161623579432234,"deps":[[8410525223747752176,"shlex",false,6741111007533077479],[9159843920629750842,"find_msvc_tools",false,11594490372809046429]],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\cc-330ce21183a542ec\\dep-lib-cc","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
1f513acffa190363
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[]","target":14022534369768855544,"profile":8138895294883096719,"path":7519541719488449219,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\cfg_aliases-1b767b1ba31b6db1\\dep-lib-cfg_aliases","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
49d1640a474899cc
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"nightly\", \"std\"]","target":5408242616063297496,"profile":17984201634715228204,"path":2280307433487588442,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\crc32fast-5e8cf28ac5b1ac8f\\dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
4518d29d984c49f7
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[\"default\", \"std\"]","target":9331843185013996172,"profile":17984201634715228204,"path":16665216071934293275,"deps":[[4289358735036141001,"proc_macro2",false,1782743344548705437],[10420560437213941093,"syn",false,14903620658101358608],[13111758008314797071,"quote",false,8517727265981585499]],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\displaydoc-fe47263f0a2d83ee\\dep-lib-displaydoc","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
93544bcc2d44629b
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[\"default\"]","declared_features":"[\"default\", \"self-test\"]","target":4282619336790389174,"profile":17984201634715228204,"path":5960260038189593437,"deps":[[12609936415420532601,"litrs",false,8019090477075727720]],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\document-features-5e95345cd7d74597\\dep-lib-document_features","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
9d39f85690e7e7a0
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[]","target":10620166500288925791,"profile":12001510762593995098,"path":425562217917207805,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\find-msvc-tools-170c33d4784c75bb\\dep-lib-find_msvc_tools","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
3653c20f77a7eabf
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[\"more_lengths\"]","declared_features":"[\"more_lengths\", \"serde\", \"zeroize\"]","target":12318548087768197662,"profile":17984201634715228204,"path":12428428514957882816,"deps":[[5398981501050481332,"version_check",false,4878342317923567443]],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\generic-array-11962be10b002661\\dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
5a22479687034e7e
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[\"unstable_generator_utils\"]","target":15798113755487949458,"profile":17984201634715228204,"path":5831746416983900128,"deps":[[4891955779658748086,"khronos_api",false,17872286832731741606],[10630857666389190470,"log",false,10447900743547125163],[13254818194777074109,"xml",false,13220196654364489643]],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\gl_generator-4a4b53ef20ec19f1\\dep-lib-gl_generator","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
60094b7e999ef7b2
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[\"default\", \"egl\", \"glutin_egl_sys\", \"glutin_glx_sys\", \"glutin_wgl_sys\", \"glx\", \"libloading\", \"wayland\", \"wayland-sys\", \"wgl\", \"windows-sys\", \"x11\", \"x11-dl\"]","declared_features":"[\"default\", \"egl\", \"glutin_egl_sys\", \"glutin_glx_sys\", \"glutin_wgl_sys\", \"glx\", \"libloading\", \"wayland\", \"wayland-sys\", \"wgl\", \"windows-sys\", \"x11\", \"x11-dl\"]","target":5408242616063297496,"profile":17984201634715228204,"path":14046356478671867428,"deps":[[1884099982326826527,"cfg_aliases",false,7134574799694221599]],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\glutin-0e54bbd00be93aa7\\dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
9e3c757f8beb4538
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[\"default\", \"egl\", \"glx\", \"wayland\", \"wgl\", \"x11\"]","declared_features":"[\"default\", \"egl\", \"glx\", \"wayland\", \"wgl\", \"x11\"]","target":5408242616063297496,"profile":17984201634715228204,"path":15507057767660003011,"deps":[[1884099982326826527,"cfg_aliases",false,7134574799694221599]],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\glutin-winit-884564fafc6d539f\\dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
e36501b957896ad3
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[]","target":5408242616063297496,"profile":17984201634715228204,"path":1475979010384437977,"deps":[[8440717196623885952,"gl_generator",false,9101215777839063642]],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\glutin_egl_sys-4ee53856df6bf130\\dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
a96d0c6c0809a763
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[]","target":5408242616063297496,"profile":17984201634715228204,"path":14813693988626596123,"deps":[[8440717196623885952,"gl_generator",false,9101215777839063642]],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\glutin_wgl_sys-13ad132743065851\\dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
753a7eadbfdcf43c
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"std\"]","target":17883862002600103897,"profile":13906502985820849561,"path":5401339696358702073,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\httparse-1fe36d1baebc3295\\dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
1a6670c5f2762636
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[]","target":5408242616063297496,"profile":14339868629254371593,"path":16221558113086644469,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\icu_normalizer_data-f4bc22fe0c2fb23b\\dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
3e1cb80a6950d05f
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[]","target":5408242616063297496,"profile":14339868629254371593,"path":16880858625928561555,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\icu_properties_data-153a517f666b97d0\\dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
a6ddddd42e1e07f8
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[]","target":8622573395090798477,"profile":17984201634715228204,"path":15189180723290854199,"deps":[[4891955779658748086,"build_script_build",false,8220577627400185833]],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\khronos_api-697387eba21c4278\\dep-lib-khronos_api","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
e927b631cc5b1572
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[4891955779658748086,"build_script_build",false,16883281269944102507]],"local":[{"Precalculated":"3.1.0"}],"rustflags":[],"config":0,"compile_kind":0}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
6b2e0612dd764dea
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[]","target":12318548087768197662,"profile":17984201634715228204,"path":15201718284168605523,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\khronos_api-eb07c31cb601bfbf\\dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
09791a2491000aef
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[\"default\", \"std\"]","declared_features":"[\"align\", \"const-extern-fn\", \"default\", \"extra_traits\", \"rustc-dep-of-std\", \"rustc-std-workspace-core\", \"std\", \"use_std\"]","target":5408242616063297496,"profile":4104031327198523981,"path":1647178533678026688,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\libc-ab11d514932a9c08\\dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
BIN
target/release/.fingerprint/litrs-9f3ccde20b5ef505/dep-lib-litrs
Normal file
BIN
target/release/.fingerprint/litrs-9f3ccde20b5ef505/dep-lib-litrs
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
6805d14b4d88496f
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[\"check_suffix\", \"proc-macro2\", \"unicode-xid\"]","target":16562482054466051373,"profile":17984201634715228204,"path":14034159570634478449,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\litrs-9f3ccde20b5ef505\\dep-lib-litrs","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
BIN
target/release/.fingerprint/log-7b65cac531858e01/dep-lib-log
Normal file
BIN
target/release/.fingerprint/log-7b65cac531858e01/dep-lib-log
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
This file has an mtime of when this was started.
|
||||||
1
target/release/.fingerprint/log-7b65cac531858e01/lib-log
Normal file
1
target/release/.fingerprint/log-7b65cac531858e01/lib-log
Normal file
@@ -0,0 +1 @@
|
|||||||
|
ab7daaf35e66fe90
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"rustc":5991146251708444534,"features":"[]","declared_features":"[\"kv\", \"kv_serde\", \"kv_std\", \"kv_sval\", \"kv_unstable\", \"kv_unstable_serde\", \"kv_unstable_std\", \"kv_unstable_sval\", \"max_level_debug\", \"max_level_error\", \"max_level_info\", \"max_level_off\", \"max_level_trace\", \"max_level_warn\", \"release_max_level_debug\", \"release_max_level_error\", \"release_max_level_info\", \"release_max_level_off\", \"release_max_level_trace\", \"release_max_level_warn\", \"serde\", \"serde_core\", \"std\", \"sval\", \"sval_ref\", \"value-bag\"]","target":6550155848337067049,"profile":17984201634715228204,"path":10907870354360838315,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release\\.fingerprint\\log-7b65cac531858e01\\dep-lib-log","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user