This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#[macro_use] extern crate cargonauts; | |
use cargonauts::futures::{Future, future}; | |
use cargonauts::resources::{Resource, Environment, Error}; | |
use cargonauts::methods::Get; | |
use cargonauts::formats::Debug; | |
routes! { | |
resource Echo { | |
method Get in Debug; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#[macro_use] extern crate cargonauts; | |
use cargonauts::futures::{Future, future}; | |
use cargonauts::resources::{Resource, Environment, Error}; | |
use cargonauts::methods::Get; | |
use cargonauts::formats::Debug; | |
routes! { | |
resource Echo { | |
method Get in Debug; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#[macro_use] extern crate cargonauts; | |
use cargonauts::futures::{Future, future}; | |
use cargonauts::resources::{Resource, Environment, Error}; | |
use cargonauts::methods::Get; | |
use cargonauts::formats::Debug; | |
routes! { | |
resource Echo { | |
method Get in Debug; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This document is the result of conversations that came out of this tweet: https://twitter.com/withoutboats/status/814201265575981056 | |
# Rust's module system is too confusing | |
Empirically, very many new users of Rust are confused by Rust's module system. This is unfortunate: Rust's module system is not particularly innovative or powerful; it is intended only to provide fairly standard privacy and namespacing support. Too much of new users' attention is being pulled by this system as it exists today. | |
This document presents an hypothesis of the cause of the confusion, and an attempt to mitigate that confusion by instituting a practice that is more similar to mainstream languages. We believe this problem is caused by the confluence of a several well-motivated design decisions that have created a very unusual system, and the solution is to require less declarations by leveraging ambient information in a manner more similar to how other languages' module systems work. | |
## Rust requires users to build an explicit |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extern crate futures; | |
use futures::Future; | |
pub trait Foo: 'static { | |
fn parse(string: String) -> Box<Future<Item = Self, Error = ()>>; | |
} | |
pub trait Bar: 'static { | |
type Id: Foo; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extern crate futures; | |
use std::str::FromStr; | |
use futures::{IntoFuture, Future}; | |
fn foo<'a, T: Foo>(string: &'a str) -> Box<Future<Item = T, Error = ()> + 'a> { | |
Box::new(string.parse().into_future() | |
.or_else(|_| Err(())) | |
.and_then(|id| Foo::from_id(&id))) |
NewerOlder