Skip to content

Commit 380bf1e

Browse files
joshnussJosé Valim
authored andcommitted
Added Map.from_struct/1
Signed-off-by: José Valim <[email protected]>
1 parent 6272b60 commit 380bf1e

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

lib/elixir/lib/map.ex

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,22 @@ defmodule Map do
3838
end, map1, map2
3939
end
4040

41+
@doc """
42+
Converts a struct to map.
43+
44+
## Example
45+
46+
defmodule User do
47+
defstruct [:name]
48+
end
49+
50+
Map.from_struct(%User{name: "valim"})
51+
#=> %{name: "valim"}
52+
53+
"""
54+
def from_struct(struct) do
55+
:maps.delete(:__struct__, struct)
56+
end
57+
4158
def equal?(%{} = map1, %{} = map2), do: map1 === map2
4259
end

lib/elixir/test/elixir/map_test.exs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,11 @@ defmodule MapTest do
124124
end
125125
end
126126

127+
test "map from struct" do
128+
assert Map.from_struct(%ExternalUser{name: "valim"}) == %{name: "valim", age: 27}
129+
assert Map.from_struct(%{name: "valim"}) == %{name: "valim"}
130+
end
131+
127132
defmodule LocalUser do
128133
defmodule NestedUser do
129134
defstruct []

0 commit comments

Comments
 (0)