Closed
Description
error[E0308]: mismatched types
--> src/main.rs:40:14
|
39 | match cursor {
| ------ this match expression has type `rocket_contrib::databases::mongodb::ordered::OrderedDocument`
40 | Some(Ok(doc)) => println!("{:?}", doc.get("name")),
| ^^^^^^^ expected struct `rocket_contrib::databases::mongodb::ordered::OrderedDocument`, found enum `std::result::Result`
|
= note: expected struct `rocket_contrib::databases::mongodb::ordered::OrderedDocument`
found enum `std::result::Result<_, _>`
error[E0308]: mismatched types
--> src/main.rs:41:14
|
39 | match cursor {
| ------ this match expression has type `rocket_contrib::databases::mongodb::ordered::OrderedDocument`
40 | Some(Ok(doc)) => println!("{:?}", doc.get("name")),
41 | Some(Err()) => panic!("Query error"),
| ^^^^^ expected struct `rocket_contrib::databases::mongodb::ordered::OrderedDocument`, found enum `std::result::Result`
|
= note: expected struct `rocket_contrib::databases::mongodb::ordered::OrderedDocument`
found enum `std::result::Result<_, _>`
error: internal compiler error: src/librustc/ty/subst.rs:610: type parameter `E/#1` (E/1) out of range when substituting (root type=Some(E)) substs=[]
thread 'rustc' panicked at 'Box<Any>', src/librustc_errors/lib.rs:851:9
stack backtrace:
0: 0x7f2ee8242574 - backtrace::backtrace::libunwind::trace::h1702f02e9561de90
at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/libunwind.rs:88
1: 0x7f2ee8242574 - backtrace::backtrace::trace_unsynchronized::h1c634812fc0220cb
at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/mod.rs:66
2: 0x7f2ee8242574 - std::sys_common::backtrace::_print_fmt::h9d5a053d21e8c033
at src/libstd/sys_common/backtrace.rs:84
3: 0x7f2ee8242574 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hc65c735014fa52d2
at src/libstd/sys_common/backtrace.rs:61
4: 0x7f2ee827aa9c - core::fmt::write::h125da652425b39e8
at src/libcore/fmt/mod.rs:1030
5: 0x7f2ee8236907 - std::io::Write::write_fmt::h20322e8675759303
at src/libstd/io/mod.rs:1412
6: 0x7f2ee8246a1e - std::sys_common::backtrace::_print::h56bfd19cdffe3007
at src/libstd/sys_common/backtrace.rs:65
7: 0x7f2ee8246a1e - std::sys_common::backtrace::print::h76b7a0cb6d897cab
at src/libstd/sys_common/backtrace.rs:50
8: 0x7f2ee8246a1e - std::panicking::default_hook::{{closure}}::h7cd2878d4328ecd0
at src/libstd/panicking.rs:188
9: 0x7f2ee8246711 - std::panicking::default_hook::hf3eaa2d2726e3f01
at src/libstd/panicking.rs:205
10: 0x7f2ee8757913 - rustc_driver::report_ice::h39ffefda20268397
11: 0x7f2ec2a5bc78 - <alloc::boxed::Box<F> as core::ops::function::Fn<A>>::call::h3de9a97a363cf759
at /rustc/412f43ac5b4ae8c3599e71c6972112e9be4758fa/src/liballoc/boxed.rs:956
12: 0x7f2ec2a60f54 - proc_macro::bridge::client::<impl proc_macro::bridge::Bridge>::enter::{{closure}}::{{closure}}::hf3dc7abf04394a0e
at /rustc/412f43ac5b4ae8c3599e71c6972112e9be4758fa/src/libproc_macro/bridge/client.rs:305
13: 0x7f2ee82471f0 - std::panicking::rust_panic_with_hook::h5240f420a7eb117e
at src/libstd/panicking.rs:468
14: 0x7f2eea1ba2dd - std::panicking::begin_panic::hce59fc8e33dd9345
15: 0x7f2eea3a730c - rustc_errors::HandlerInner::span_bug::h6ddd4e38ee634399
16: 0x7f2eea3a79ca - rustc_errors::Handler::span_bug::hea5ec8f498c43470
17: 0x7f2ee9eef646 - rustc::util::bug::opt_span_bug_fmt::{{closure}}::hf13d905ef681d8a4
18: 0x7f2ee9eee4e3 - rustc::ty::context::tls::with_opt::{{closure}}::h7a408e658785e840
19: 0x7f2ee9eee49b - rustc::ty::context::tls::with_opt::hf0afa98f66999d61
20: 0x7f2ee9eef548 - rustc::util::bug::opt_span_bug_fmt::h9c34aa1f1b8de485
21: 0x7f2ee9eef4fa - rustc::util::bug::span_bug_fmt::h2a91091c060021f7
22: 0x7f2ee9eede2f - <rustc::ty::subst::SubstFolder as rustc::ty::fold::TypeFolder>::fold_ty::h065fd281b8378a74
23: 0x7f2eea184ae5 - rustc::ty::FieldDef::ty::h6ed4fec5c4ff734a
24: 0x7f2ee8ca4c21 - rustc_typeck::check::pat::<impl rustc_typeck::check::FnCtxt>::check_pat_tuple_struct::hed047121ed0f6129
25: 0x7f2ee8ca228a - rustc_typeck::check::pat::<impl rustc_typeck::check::FnCtxt>::check_pat::h8c223b265708d799
26: 0x7f2ee8ca45b6 - rustc_typeck::check::pat::<impl rustc_typeck::check::FnCtxt>::check_pat_tuple_struct::hed047121ed0f6129
27: 0x7f2ee8ca228a - rustc_typeck::check::pat::<impl rustc_typeck::check::FnCtxt>::check_pat::h8c223b265708d799
28: 0x7f2ee8d638b2 - <core::iter::adapters::Map<I,F> as core::iter::traits::iterator::Iterator>::fold::h9b19277c4c3d33c7
29: 0x7f2ee8ca0410 - rustc_typeck::check::_match::<impl rustc_typeck::check::FnCtxt>::check_match::h7b43562d114db5ba
30: 0x7f2ee8cb3bd3 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_kind::h621cba1ce85f3bfa
31: 0x7f2ee8cb2bdb - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_with_expectation_and_needs::h10842dfddc07c322
32: 0x7f2ee8ce971d - rustc_typeck::check::FnCtxt::check_stmt::h9069aeb6f9bb592c
33: 0x7f2ee8ce9eeb - rustc_typeck::check::FnCtxt::check_block_with_expected::hd23ab1c30aca9f76
34: 0x7f2ee8cb36a4 - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_kind::h621cba1ce85f3bfa
35: 0x7f2ee8cb2bdb - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_expr_with_expectation_and_needs::h10842dfddc07c322
36: 0x7f2ee8cbccdb - rustc_typeck::check::expr::<impl rustc_typeck::check::FnCtxt>::check_return_expr::hec0352eaf6d21383
37: 0x7f2ee8cd713f - rustc_typeck::check::check_fn::h4e57fd33a6d18087
38: 0x7f2ee8e6acdc - rustc::ty::context::tls::with_context::{{closure}}::h8f8fbb2b2dcb897a
39: 0x7f2ee8cd5f5e - rustc_typeck::check::typeck_tables_of::h9efdf2ea10a60cbe
40: 0x7f2ee8e9a7db - rustc::ty::query::__query_compute::typeck_tables_of::h64f7384b1e03c8b0
41: 0x7f2ee8dea0bb - rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::typeck_tables_of>::compute::hdae8375eb6905d53
42: 0x7f2ee8d881a2 - rustc::dep_graph::graph::DepGraph::with_task_impl::h8f72393095b798e4
43: 0x7f2ee8e14e67 - rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query::h4e91f8b94db7f244
44: 0x7f2ee8de67df - rustc::ty::<impl rustc::ty::context::TyCtxt>::par_body_owners::h2df1696af550d441
45: 0x7f2ee8cd598d - rustc_typeck::check::typeck_item_bodies::ha35400c27617e81a
46: 0x7f2ee8e9ac36 - rustc::ty::query::__query_compute::typeck_item_bodies::hf583e7cf90339324
47: 0x7f2ee8d814e4 - rustc::dep_graph::graph::DepGraph::with_task_impl::h3a735b0e648e7716
48: 0x7f2ee8dff118 - rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query::h1b0c64af69e1ce8f
49: 0x7f2ee8da4bae - rustc::util::common::time::hd74d8c2dc5c39254
50: 0x7f2ee8e8845c - rustc_typeck::check_crate::hcb89034957ab6be5
51: 0x7f2ee88b2cc4 - rustc_interface::passes::analysis::h86183d8934bc78f6
52: 0x7f2ee8716962 - rustc::ty::query::__query_compute::analysis::heb964b4c6538bd5f
53: 0x7f2ee8738e31 - rustc::dep_graph::graph::DepGraph::with_task_impl::hb26b6d3880f3aceb
54: 0x7f2ee87762b8 - rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query::hcaa46aabeafd9f3a
55: 0x7f2ee872d95a - rustc_interface::passes::BoxedGlobalCtxt::access::{{closure}}::h42f93dad97389f0e
56: 0x7f2ee87eb3fa - rustc_interface::passes::create_global_ctxt::{{closure}}::h098d28aa69d1d794
57: 0x7f2ee872d6be - rustc_interface::passes::BoxedGlobalCtxt::enter::h3fe2135e3ea0e68f
58: 0x7f2ee876c395 - rustc_interface::interface::run_compiler_in_existing_thread_pool::h74fe8698afc5355f
59: 0x7f2ee871a201 - std::thread::local::LocalKey<T>::with::h1335fb5b8417d248
60: 0x7f2ee87130ee - scoped_tls::ScopedKey<T>::set::h86ea0176693c2757
61: 0x7f2ee8739662 - syntax::with_globals::h7f2fc43fa8fbf963
62: 0x7f2ee87144fb - std::sys_common::backtrace::__rust_begin_short_backtrace::hbdb7b75ec205d89c
63: 0x7f2ee8257aca - __rust_maybe_catch_panic
at src/libpanic_unwind/lib.rs:81
64: 0x7f2ee872ef29 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h34e4c42d025bfebf
65: 0x7f2ee822883f - <alloc::boxed::Box<F> as core::ops::function::FnOnce<A>>::call_once::h8c2b476dfb8616ca
at /rustc/412f43ac5b4ae8c3599e71c6972112e9be4758fa/src/liballoc/boxed.rs:942
66: 0x7f2ee82564f0 - <alloc::boxed::Box<F> as core::ops::function::FnOnce<A>>::call_once::he47b96da53271318
at /rustc/412f43ac5b4ae8c3599e71c6972112e9be4758fa/src/liballoc/boxed.rs:942
67: 0x7f2ee82564f0 - std::sys_common::thread::start_thread::h7e2276dd96733930
at src/libstd/sys_common/thread.rs:13
68: 0x7f2ee82564f0 - std::sys::unix::thread::Thread::new::thread_start::h8ea1856ee3d32871
at src/libstd/sys/unix/thread.rs:79
69: 0x7f2ee7fc36db - start_thread
70: 0x7f2ee78e088f - __clone
71: 0x0 - <unknown>
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
note: rustc 1.41.0-nightly (412f43ac5 2019-11-24) running on x86_64-unknown-linux-gnu
note: compiler flags: -C debuginfo=2 -C incremental --crate-type bin
note: some of the compiler flags provided by cargo are hidden
query stack during panic:
#0 [typeck_tables_of] processing `login_auth`
#1 [typeck_item_bodies] type-checking all item bodies
#2 [analysis] running analysis passes on this crate
end of query stack
Source code:
#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use]
extern crate rocket;
extern crate tera;
#[macro_use]
extern crate rocket_contrib;
use rocket_contrib::json::Json;
use rocket_contrib::templates::Template;
use serde::{Deserialize, Serialize};
use rocket::fairing::AdHoc;
use rocket_contrib::databases::mongodb;
use std::collections::HashMap;
use mongodb::{bson, doc, Bson};
use crate::rocket_contrib::databases::mongodb::db::ThreadedDatabase;
#[database("main_db")]
struct MainDbConnection(mongodb::db::Database);
#[derive(Deserialize, Debug)]
struct LoginData {
username: String,
password: String,
}
#[derive(Serialize)]
struct JsonResponse {
status: String,
}
#[post("/", data = "<LoginData>")]
fn login_auth(conn: MainDbConnection, LoginData: Json<LoginData>) -> Json<JsonResponse> {
let doc = doc! {"name":"[email protected]", "password":"123123"};
let mut cursor = conn.collection("users").find_one(Some(doc), None).unwrap();
match cursor {
Some(Ok(doc)) => println!("{:?}", doc.get("name")),
Some(Err(cursor.unwrap())) => panic!("Query error"),
None => panic!("None"),
}
Json(JsonResponse {
status: String::from("Ok"),
})
}
#[get("/")]
fn index() -> Template {
let context: HashMap<&str, &str> = HashMap::new();
Template::render("index", &context)
}
fn rocket() -> rocket::Rocket {
rocket::ignite()
.attach(MainDbConnection::fairing())
.attach(Template::fairing())
.mount("/", routes![index])
.mount("/auth", routes![login_auth])
}
fn main() {
rocket().launch();
}