Skip to content

Commit d20d957

Browse files
committed
Add @enum_from_value
1 parent 008274c commit d20d957

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

lib/std/core/builtin.c3

+18
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,24 @@ macro enum_by_name($Type, String enum_name) @builtin
235235
return SearchResult.MISSING?;
236236
}
237237

238+
<*
239+
@param $Type `The type of the enum`
240+
@require $Type.kindof == ENUM `Only enums may be used`
241+
@require $defined($Type.#value1) `Expected '#value' to match an enum associated value`
242+
@require $assignable(value, $typeof($Type{}.#value)) `Expected the value to match the type of the associated value`
243+
@ensure @typeis(return, $Type)
244+
@return! SearchResult.MISSING
245+
*>
246+
macro @enum_from_value($Type, #value, value) @builtin
247+
{
248+
usz elements = $Type.elements;
249+
foreach (e : $Type.values)
250+
{
251+
if (e.#value == value) return e;
252+
}
253+
return SearchResult.MISSING?;
254+
}
255+
238256
<*
239257
Mark an expression as likely to be true
240258

releasenotes.md

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
- Added `iter()` `value_iter()` and `key_iter()` to HashMap.
3737
- Add "tokenizer" to String.
3838
- Add "skip_empty" to split methods. Add split_to_buffer method.
39+
- Add `@enum_from_value`.
3940

4041
## 0.6.5 Change list
4142

0 commit comments

Comments
 (0)