Skip to content

Commit 43091b0

Browse files
committed
Add error examples for missing lifetime specifier and trait bound, and project examples for a markdown parser and HTTP server
Signed-off-by: Acuspeedster <arnavrajsingh@gmail.com>
1 parent 836de51 commit 43091b0

File tree

4 files changed

+28
-0
lines changed

4 files changed

+28
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"error": "error[E0106]: missing lifetime specifier",
3+
"context": "This error occurs when you return a reference from a function without specifying a lifetime parameter",
4+
"solution": "Add a lifetime parameter to the function signature and any references that need it",
5+
"example": "// Before (error)\nfn longest(x: &str, y: &str) -> &str {\n if x.len() > y.len() { x } else { y }\n}\n\n// After (fixed)\nfn longest<'a>(x: &'a str, y: &'a str) -> &'a str {\n if x.len() > y.len() { x } else { y }\n}"
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"error": "error[E0277]: the trait bound `T: std::fmt::Display` is not satisfied",
3+
"context": "This error occurs when trying to use a generic type without specifying that it needs to implement a required trait",
4+
"solution": "Add the necessary trait bound to the generic type parameter",
5+
"example": "// Before (error)\nfn print_item<T>(item: T) {\n println!(\"{}\", item);\n}\n\n// After (fixed)\nfn print_item<T: std::fmt::Display>(item: T) {\n println!(\"{}\", item);\n}"
6+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"query": "How to build a markdown parser in Rust",
3+
"example": "A Rust implementation of a basic markdown parser that handles headers, bold, italic, and links",
4+
"project_files": {
5+
"Cargo.toml": "[package]\nname = \"rust-markdown-parser\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[dependencies]\nregex = \"1.5\"",
6+
"src/main.rs": "use std::fs;\nuse regex::Regex;\n\nstruct MarkdownParser {\n input: String,\n}\n\nimpl MarkdownParser {\n fn new(input: String) -> Self {\n MarkdownParser { input }\n }\n\n fn parse_headers(&self) -> String {\n let header_regex = Regex::new(r\"^(#{1,6})\\s+(.+)$\").unwrap();\n let mut output = self.input.clone();\n\n for line in self.input.lines() {\n if let Some(captures) = header_regex.captures(line) {\n let level = captures.get(1).unwrap().as_str().len();\n let text = captures.get(2).unwrap().as_str();\n let html_header = format!(\"<h{}>{}</h{}>\", level, text, level);\n output = output.replace(line, &html_header);\n }\n }\n output\n }\n\n fn parse_bold_italic(&self, html: String) -> String {\n let bold_regex = Regex::new(r\"\\*\\*(.*?)\\*\\*\").unwrap();\n let italic_regex = Regex::new(r\"\\*(.*?)\\*\").unwrap();\n\n let bold_html = bold_regex.replace_all(&html, \"<strong>$1</strong>\");\n let italic_html = italic_regex.replace_all(&bold_html, \"<em>$1</em>\");\n \n italic_html.into()\n }\n\n fn parse_links(&self, html: String) -> String {\n let link_regex = Regex::new(r\"\\[([^\\]]+)\\]\\(([^\\)]+)\\)\").unwrap();\n link_regex.replace_all(&html, \"<a href=\\\"$2\\\">$1</a>\").into()\n }\n\n fn parse(&self) -> String {\n let headers_html = self.parse_headers();\n let formatted_html = self.parse_bold_italic(headers_html);\n let final_html = self.parse_links(formatted_html);\n final_html\n }\n}\n\nfn main() {\n let markdown = fs::read_to_string(\"input.md\").expect(\"Could not read file\");\n let parser = MarkdownParser::new(markdown);\n let html = parser.parse();\n fs::write(\"output.html\", html).expect(\"Could not write file\");\n}"
7+
}
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"query": "How to build a basic HTTP server in Rust",
3+
"example": "A simple Rust HTTP server that can serve static files and handle basic routes",
4+
"project_files": {
5+
"Cargo.toml": "[package]\nname = \"rust-http-server\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[dependencies]\ntokio = { version = \"1\", features = [\"full\"] }\nhyper = { version = \"0.14\", features = [\"full\"] }\nhttp-body = \"0.4\"\nmime = \"0.3\"",
6+
"src/main.rs": "use hyper::{Body, Request, Response, Server, Method, StatusCode};\nuse hyper::service::{make_service_fn, service_fn};\nuse std::convert::Infallible;\nuse std::net::SocketAddr;\nuse std::fs;\n\nasync fn handle_request(req: Request<Body>) -> Result<Response<Body>, Infallible> {\n match (req.method(), req.uri().path()) {\n (&Method::GET, \"/\") => {\n let content = fs::read_to_string(\"index.html\")\n .unwrap_or_else(|_| \"Welcome to Rust HTTP Server\".to_string());\n Ok(Response::new(Body::from(content)))\n },\n (&Method::GET, \"/hello\") => {\n Ok(Response::new(Body::from(\"Hello from Rust HTTP Server!\")))\n },\n (&Method::GET, \"/files\") => {\n let files: Vec<String> = fs::read_dir(\".\")\n .unwrap()\n .filter_map(|entry| {\n entry.ok().and_then(|e| \n e.file_name().into_string().ok()\n )\n })\n .collect();\n \n let response = serde_json::to_string(&files).unwrap();\n \n Ok(Response::new(Body::from(response)))\n },\n _ => {\n let mut response = Response::new(Body::from(\"Not Found\"));\n *response.status_mut() = StatusCode::NOT_FOUND;\n Ok(response)\n }\n }\n}\n\n#[tokio::main]\nasync fn main() {\n let addr = SocketAddr::from(([127, 0, 0, 1], 8080));\n let make_svc = make_service_fn(|_conn| async {\n Ok::<_, Infallible>(service_fn(handle_request))\n });\n\n let server = Server::bind(&addr).serve(make_svc);\n\n println!(\"Server running on http://{}\", addr);\n\n if let Err(e) = server.await {\n eprintln!(\"server error: {}\", e);\n }\n}"
7+
}
8+
}

0 commit comments

Comments
 (0)