Skip to content

Commit c25e8de

Browse files
committed
Enum convenience methods
1 parent c656d75 commit c25e8de

4 files changed

Lines changed: 43 additions & 0 deletions

File tree

src/FSharpx.Extras/Enum.fs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
namespace FSharpx
2+
open System.Linq
3+
4+
module Enum=
5+
let tryParse s :'a option when 'a:enum<'b> =
6+
match System.Enum.TryParse (s) with
7+
| true, v -> Some v
8+
| _ -> None
9+
10+
let parse s : 'a =
11+
System.Enum.Parse(typeof<'a>, s) :?> 'a
12+
13+
let getValues<'t> ()=
14+
let values = System.Enum.GetValues (typeof<'t>)
15+
Enumerable.Cast<'t> values //Array.unbox

src/FSharpx.Extras/FSharpx.Extras.fsproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
<Content Include="app.config" />
8787
<Compile Include="Net.fs" />
8888
<Compile Include="Conneg.fs" />
89+
<Compile Include="Enum.fs" />
8990
</ItemGroup>
9091
<ItemGroup>
9192
<Reference Include="FSharp.Control.AsyncSeq">

tests/FSharpx.Tests/EnumTest.fs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module FSharpx.Http.Tests.EnumTests
2+
open NUnit.Framework
3+
open FSharpx
4+
5+
type LanguageOptions=
6+
| FSharp = 0
7+
| CSharp = 1
8+
| VB = 2
9+
10+
[<Test>]
11+
let ``tryParse can parse value and return Some value`` ()=
12+
Assert.AreEqual(Some LanguageOptions.CSharp, (Enum.tryParse("CSharp") : LanguageOptions option))
13+
14+
[<Test>]
15+
let ``tryParse returns None if it fails to parse`` ()=
16+
Assert.AreEqual(None, (Enum.tryParse("English") : LanguageOptions option))
17+
18+
[<Test>]
19+
let ``parse returns parsed value`` ()=
20+
Assert.AreEqual(LanguageOptions.CSharp ,(Enum.parse("CSharp") : LanguageOptions))
21+
22+
let ``parse throws an exception when it fails to parse`` ()=
23+
let parseEnglish ()=
24+
let x = Enum.parse("English") : LanguageOptions
25+
()
26+
Assert.Throws<System.Exception>( TestDelegate( parseEnglish ) )

tests/FSharpx.Tests/FSharpx.Tests.fsproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
<Compile Include="ControlTests.fs" />
9696
<Compile Include="AsyncStreamReaderTest.fs" />
9797
<Compile Include="ConnegTests.fs" />
98+
<Compile Include="EnumTest.fs" />
9899
</ItemGroup>
99100
<ItemGroup>
100101
<Reference Include="FsCheck">

0 commit comments

Comments
 (0)