RFC: Enum trait
Nobody has claimed this yet.
- Dominant language
- Markdown
- Stars
- 6.6k
- Forks
- 1.7k
- Avg merge
- 16h 14m
- Merged PRs (30d)
- 1
Description
Issue by ghost
Sunday Mar 17, 2013 at 02:56 GMT
For earlier discussion, see https://github.com/rust-lang/rust/issues/5417
This issue was labelled with: A-libs, A-traits, B-RFC in the Rust repository
Since I've been doing some work with the deriving code in libsyntax, I thought I'd solicit opinions on adding a new trait to libcore:
trait Enum {
static fn enumerate(blk: &fn(Self) -> bool);
}
Obviously, this would be most useful for enums with only nullary variants, but other enumerable types could take advantage of it as well (bool::all_values currently serves the same purpose).
This would make it possible to write
// enum Dir { North, East, South, West }
for Enum::enumerate |dir: Dir| { ... }
instead of
for [North, East, South, West].each |dir| { ... }
A standard implementation for enums with only nullary variants would be made available through #[deriving(Enum)], and a default method (or utility trait/impl until those are working) would be provided for obtaining all the values in a vector. It might be beneficial to have a static fn cardinality() -> Option<uint> method on the trait as well.
If the trait name is too easily confused with the keyword, another option is Enumerable.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the earlier discussion in rust-lang/rust issue 5417, then inspect the deriving code in libsyntax and the proposed libcore trait. Determine whether an Enum or Enumerable trait, enumeration behavior, and cardinality API have consensus; done means an accepted design and RFC decision, not just an implementation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100