Skip to content

Commit b0d090b

Browse files
committed
feat: web server
1 parent 5722087 commit b0d090b

File tree

349 files changed

+1169
-5
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

349 files changed

+1169
-5
lines changed

hello/src/main.rs renamed to hello/src/bin/main.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,26 @@ use std::net::TcpStream;
44
use std::net::TcpListener;
55
use std::thread;
66
use std::time::Duration;
7+
use hello::ThreadPool;
78

89
fn main() {
910
let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
11+
let pool = ThreadPool::new(4);
1012

11-
for stream in listener.incoming() {
13+
// 目的:处理两个请求后退出循环并关闭服务器。此处使用 take(2) 限制迭代过程只会进行两次。
14+
for stream in listener.incoming().take(2) {
15+
// for stream in listener.incoming() {
1216
let stream = stream.unwrap();
1317

14-
thread::spawn(|| {
18+
// thread::spawn(|| {
19+
// handle_connection(stream);
20+
// });
21+
pool.execute(|| {
1522
handle_connection(stream);
1623
});
1724
}
25+
26+
println!("Shutting down.");
1827
}
1928

2029
fn handle_connection(mut stream: TcpStream) {

hello/src/lib.rs

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
use std::sync::Arc;
2+
use std::sync::Mutex;
3+
use std::thread;
4+
use std::sync::mpsc;
5+
6+
enum Message {
7+
NewJob(Job),
8+
Terminate,
9+
}
10+
11+
pub struct ThreadPool {
12+
workers: Vec<Worker>,
13+
sender: mpsc::Sender<Message>,
14+
}
15+
16+
type Job = Box<dyn FnOnce() + Send + 'static>;
17+
18+
impl ThreadPool {
19+
/// 创建线程池
20+
///
21+
/// 线程池中线程的数量。
22+
///
23+
/// # Panics
24+
///
25+
/// `new` 函数会在 size 为 0 时触发 panic。
26+
pub fn new(size: usize) -> ThreadPool {
27+
assert!(size > 0);
28+
29+
let (sender, receiver) = mpsc::channel();
30+
31+
let receiver = Arc::new(Mutex::new(receiver));
32+
33+
let mut workers = Vec::with_capacity(size);
34+
35+
for id in 0..size {
36+
// 创建线程并将它们存储至动态数组中
37+
workers.push(Worker::new(id, Arc::clone(&receiver)));
38+
}
39+
40+
ThreadPool {
41+
workers,
42+
sender,
43+
}
44+
}
45+
46+
pub fn execute<F>(&self, f: F)
47+
where F: FnOnce() + Send + 'static {
48+
let job = Box::new(f);
49+
self.sender.send(Message::NewJob(job)).unwrap();
50+
}
51+
}
52+
53+
impl Drop for ThreadPool {
54+
fn drop(&mut self) {
55+
println!("Sending terminate message to all workers.");
56+
57+
// 标记 ①。
58+
for _ in &mut self.workers {
59+
self.sender.send(Message::Terminate).unwrap();
60+
}
61+
62+
println!("Shutting down all workers.");
63+
64+
// 标记 ②。
65+
// 标记 ①、② 使用两个循环而未合并用一个循环的目的是为了避免出现死锁问题。
66+
// 这么做可以避免死锁问题的原因为在 ① 中对所有 work 发送结束信号,所有 work 都后会停止接受请求。
67+
for worker in &mut self.workers {
68+
println!("Shutting down worker {}", worker.id);
69+
70+
// 目的:得到所有权。为 Option 值调用 take 方法会将 Some 变体的值移出并在原有位置留下 None 变体。
71+
if let Some(thread) = worker.thread.take() {
72+
// Todo:确认当前代码貌似无效
73+
// 目的:使正在处理的工作线程不会因为一些异常情况(如 ctrl + c 停止主线程)终止运行。
74+
thread.join().unwrap();
75+
}
76+
}
77+
}
78+
}
79+
80+
struct Worker {
81+
id: usize,
82+
thread: Option<thread::JoinHandle<()>>,
83+
}
84+
85+
impl Worker {
86+
fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Message>>>) -> Worker {
87+
let thread = thread::spawn(move || {
88+
loop {
89+
let message: Message = receiver.lock().unwrap().recv().unwrap();
90+
91+
match message {
92+
Message::NewJob(job) => {
93+
println!("Worker {} got a job; executing.", id);
94+
95+
job();
96+
},
97+
Message::Terminate => {
98+
println!("Worker {} was told to terminate.", id);
99+
100+
break;
101+
},
102+
}
103+
}
104+
});
105+
106+
Worker {
107+
id,
108+
thread: Some(thread),
109+
}
110+
}
111+
}

hello/target/.rustc_info.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"rustc_fingerprint":3299840891311980700,"outputs":{"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.67.0 (fc594f156 2023-01-24)\nbinary: rustc\ncommit-hash: fc594f15669680fa70d255faec3ca3fb507c3405\ncommit-date: 2023-01-24\nhost: x86_64-apple-darwin\nrelease: 1.67.0\nLLVM version: 15.0.6\n","stderr":""},"10376369925670944939":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/mac/.rustup/toolchains/stable-x86_64-apple-darwin\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_feature=\"ssse3\"\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=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"apple\"\nunix\n","stderr":""},"9145534597574502034":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n","stderr":""},"15697416045686424142":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n","stderr":""},"1008668923510693610":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/mac/.rustup/toolchains/stable-x86_64-apple-darwin\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_feature=\"ssse3\"\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=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"apple\"\nunix\n","stderr":""}},"successes":{}}
1+
{"rustc_fingerprint":3299840891311980700,"outputs":{"9145534597574502034":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n","stderr":""},"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.67.0 (fc594f156 2023-01-24)\nbinary: rustc\ncommit-hash: fc594f15669680fa70d255faec3ca3fb507c3405\ncommit-date: 2023-01-24\nhost: x86_64-apple-darwin\nrelease: 1.67.0\nLLVM version: 15.0.6\n","stderr":""},"10376369925670944939":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/mac/.rustup/toolchains/stable-x86_64-apple-darwin\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_feature=\"ssse3\"\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=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"apple\"\nunix\n","stderr":""},"1008668923510693610":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/mac/.rustup/toolchains/stable-x86_64-apple-darwin\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_feature=\"ssse3\"\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=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"apple\"\nunix\n","stderr":""},"15697416045686424142":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n","stderr":""}},"successes":{}}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"rustc_vv":"rustc 1.67.0 (fc594f156 2023-01-24)\nbinary: rustc\ncommit-hash: fc594f15669680fa70d255faec3ca3fb507c3405\ncommit-date: 2023-01-24\nhost: x86_64-apple-darwin\nrelease: 1.67.0\nLLVM version: 15.0.6\n"}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This file has an mtime of when this was started.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{"message":"failed to resolve: use of undeclared type `ThreadPool`","code":{"code":"E0433","explanation":"An undeclared crate, module, or type was used.\n\nErroneous code example:\n\n```compile_fail,E0433\nlet map = HashMap::new();\n// error: failed to resolve: use of undeclared type `HashMap`\n```\n\nPlease verify you didn't misspell the type/module's name or that you didn't\nforget to import it:\n\n```\nuse std::collections::HashMap; // HashMap has been imported.\nlet map: HashMap<u32, u32> = HashMap::new(); // So it can be used!\n```\n\nIf you've expected to use a crate name:\n\n```compile_fail\nuse ferris_wheel::BigO;\n// error: failed to resolve: use of undeclared crate or module `ferris_wheel`\n```\n\nMake sure the crate has been added as a dependency in `Cargo.toml`.\n\nTo use a module from your current crate, add the `crate::` prefix to the path.\n"},"level":"error","spans":[{"file_name":"src/main.rs","byte_start":225,"byte_end":235,"line_start":10,"line_end":10,"column_start":16,"column_end":26,"is_primary":true,"text":[{"text":" let pool = ThreadPool::new(4);","highlight_start":16,"highlight_end":26}],"label":"use of undeclared type `ThreadPool`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror[E0433]\u001b[0m\u001b[0m\u001b[1m: failed to resolve: use of undeclared type `ThreadPool`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/main.rs:10:16\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m10\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let pool = ThreadPool::new(4);\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9muse of undeclared type `ThreadPool`\u001b[0m\n\n"}
2+
{"message":"aborting due to previous error","code":null,"level":"error","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: aborting due to previous error\u001b[0m\n\n"}
3+
{"message":"For more information about this error, try `rustc --explain E0433`.","code":null,"level":"failure-note","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1mFor more information about this error, try `rustc --explain E0433`.\u001b[0m\n"}

hello/target/debug/.fingerprint/hello-160562601a6931fb/test-bin-hello

Whitespace-only changes.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"rustc":2209823359022848052,"features":"[]","target":8206159660137867950,"profile":11506243869495082934,"path":1684066648322511884,"deps":[[4528510464237763391,"hello",false,12601179192983289630]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/hello-160562601a6931fb/dep-test-bin-hello"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This file has an mtime of when this was started.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1effcf4cb661e0ae
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"rustc":2209823359022848052,"features":"[]","target":128724008561193866,"profile":17483045194147818835,"path":17523903030608720598,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/hello-1b8657d91b939e7a/dep-lib-hello"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
a4c6bfb838bddf9e
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{"message":"failed to resolve: use of undeclared type `ThreadPool`","code":{"code":"E0433","explanation":"An undeclared crate, module, or type was used.\n\nErroneous code example:\n\n```compile_fail,E0433\nlet map = HashMap::new();\n// error: failed to resolve: use of undeclared type `HashMap`\n```\n\nPlease verify you didn't misspell the type/module's name or that you didn't\nforget to import it:\n\n```\nuse std::collections::HashMap; // HashMap has been imported.\nlet map: HashMap<u32, u32> = HashMap::new(); // So it can be used!\n```\n\nIf you've expected to use a crate name:\n\n```compile_fail\nuse ferris_wheel::BigO;\n// error: failed to resolve: use of undeclared crate or module `ferris_wheel`\n```\n\nMake sure the crate has been added as a dependency in `Cargo.toml`.\n\nTo use a module from your current crate, add the `crate::` prefix to the path.\n"},"level":"error","spans":[{"file_name":"src/main.rs","byte_start":225,"byte_end":235,"line_start":10,"line_end":10,"column_start":16,"column_end":26,"is_primary":true,"text":[{"text":" let pool = ThreadPool::new(4);","highlight_start":16,"highlight_end":26}],"label":"use of undeclared type `ThreadPool`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror[E0433]\u001b[0m\u001b[0m\u001b[1m: failed to resolve: use of undeclared type `ThreadPool`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/main.rs:10:16\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m10\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let pool = ThreadPool::new(4);\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9muse of undeclared type `ThreadPool`\u001b[0m\n\n"}
2+
{"message":"aborting due to previous error","code":null,"level":"error","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: aborting due to previous error\u001b[0m\n\n"}
3+
{"message":"For more information about this error, try `rustc --explain E0433`.","code":null,"level":"failure-note","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1mFor more information about this error, try `rustc --explain E0433`.\u001b[0m\n"}

hello/target/debug/.fingerprint/hello-371119210bcc9c32/bin-hello

Whitespace-only changes.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"rustc":2209823359022848052,"features":"[]","target":8206159660137867950,"profile":17483045194147818835,"path":1684066648322511884,"deps":[[4528510464237763391,"hello",false,12601179192983289630]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/hello-371119210bcc9c32/dep-bin-hello"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This file has an mtime of when this was started.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{"message":"failed to resolve: use of undeclared type `ThreadPool`","code":{"code":"E0433","explanation":"An undeclared crate, module, or type was used.\n\nErroneous code example:\n\n```compile_fail,E0433\nlet map = HashMap::new();\n// error: failed to resolve: use of undeclared type `HashMap`\n```\n\nPlease verify you didn't misspell the type/module's name or that you didn't\nforget to import it:\n\n```\nuse std::collections::HashMap; // HashMap has been imported.\nlet map: HashMap<u32, u32> = HashMap::new(); // So it can be used!\n```\n\nIf you've expected to use a crate name:\n\n```compile_fail\nuse ferris_wheel::BigO;\n// error: failed to resolve: use of undeclared crate or module `ferris_wheel`\n```\n\nMake sure the crate has been added as a dependency in `Cargo.toml`.\n\nTo use a module from your current crate, add the `crate::` prefix to the path.\n"},"level":"error","spans":[{"file_name":"src/main.rs","byte_start":225,"byte_end":235,"line_start":10,"line_end":10,"column_start":16,"column_end":26,"is_primary":true,"text":[{"text":" let pool = ThreadPool::new(4);","highlight_start":16,"highlight_end":26}],"label":"use of undeclared type `ThreadPool`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror[E0433]\u001b[0m\u001b[0m\u001b[1m: failed to resolve: use of undeclared type `ThreadPool`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/main.rs:10:16\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m10\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let pool = ThreadPool::new(4);\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9muse of undeclared type `ThreadPool`\u001b[0m\n\n"}
2+
{"message":"aborting due to previous error","code":null,"level":"error","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: aborting due to previous error\u001b[0m\n\n"}
3+
{"message":"For more information about this error, try `rustc --explain E0433`.","code":null,"level":"failure-note","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1mFor more information about this error, try `rustc --explain E0433`.\u001b[0m\n"}
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This file has an mtime of when this was started.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
d40bb062405b37d1
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"rustc":2209823359022848052,"features":"[]","target":128724008561193866,"profile":11736316127369858332,"path":17523903030608720598,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/hello-43a25b094e2f1553/dep-lib-hello"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0dde513b21d40d21
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"rustc":2209823359022848052,"features":"[]","target":8767251132964838570,"profile":9501221371400256673,"path":3058107988629286347,"deps":[[4528510464237763391,"hello",false,12601179192983289630],[4528510464237763391,"hello",false,13381009253270398672]],"local":[{"Precalculated":"1692960868.836276104s (target/.rustdoc_fingerprint.json)"}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
d0a6652d05e5b2b9
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"rustc":2209823359022848052,"features":"[]","target":128724008561193866,"profile":8364103326337895566,"path":17523903030608720598,"deps":[],"local":[{"Precalculated":"1692960868.836276104s (target/.rustdoc_fingerprint.json)"}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This file has an mtime of when this was started.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fec76a1cf32bde7d
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"rustc":2209823359022848052,"features":"[]","target":8767251132964838570,"profile":11506243869495082934,"path":3058107988629286347,"deps":[[4528510464237763391,"hello",false,12601179192983289630]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/hello-6d011a84feb8aaa6/dep-test-bin-main"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
6e33a7e18d60e540
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"rustc":2209823359022848052,"features":"[]","target":8767251132964838570,"profile":17483045194147818835,"path":3058107988629286347,"deps":[[4528510464237763391,"hello",false,12601179192983289630]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/hello-8355e9f9ea69d76b/dep-bin-main"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This file has an mtime of when this was started.

0 commit comments

Comments
 (0)