Skip to content

Commit 2c50ee0

Browse files
committed
add hasbatteries
1 parent 01ab6bb commit 2c50ee0

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "StructHelpers"
22
uuid = "4093c41a-2008-41fd-82b8-e3f9d02b504f"
33
authors = ["Jan Weidner <jw3126@gmail.com> and contributors"]
4-
version = "1.1.2"
4+
version = "1.3"
55

66
[deps]
77
ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9"

src/StructHelpers.jl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,15 @@ function hash_eq_as(obj)
2929
Tuple(getproperties(obj))
3030
end
3131

32+
"""
33+
hasbatteries(T::Type)::Bool
34+
35+
Check if `@batteries` or `@enumbatteries` was applied to `T`.
36+
"""
37+
function hasbatteries(::Type)::Bool
38+
false
39+
end
40+
3241
@inline function structural_eq(o1, o2)
3342
getproperties(o1) == getproperties(o2)
3443
end
@@ -233,9 +242,18 @@ macro batteries(T, kw...)
233242
def = :($ST.StructType(::Type{<:$T}) = $ST.Struct())
234243
push!(ret.args, def)
235244
end
245+
push!(ret.args, def_hasbatteries(T))
236246
return esc(ret)
237247
end
238248

249+
function def_hasbatteries(T)
250+
:(
251+
function ($hasbatteries)(::Type{<:$T})
252+
true
253+
end
254+
)
255+
end
256+
239257
function error_parse_macro_kw(kw; comment=nothing)
240258
msg = """
241259
Expected a keyword argument of the form name = value.
@@ -427,6 +445,7 @@ macro enumbatteries(T, kw...)
427445
def = def_selfconstructor(T)
428446
push!(ret.args, def)
429447
end
448+
push!(ret.args, def_hasbatteries(T))
430449
return esc(ret)
431450
end
432451

test/runtests.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ struct SNoIsEqual; a; end
5555
@test Skw(1,[]) == Skw(1,[])
5656
@test SNoHash(1,[]) == SNoHash(1,[])
5757
@test SVanilla(1,[]) != SVanilla(1,[])
58+
@test SH.hasbatteries(SBatteries)
59+
@test !SH.hasbatteries(SVanilla)
60+
@test !SH.hasbatteries(Tuple)
5861

5962
@test isequal(SBatteries(NaN, 1), SBatteries(NaN, 1))
6063
@test !isequal(SBatteries(1, 1), SBatteries(NaN, 1))
@@ -117,14 +120,17 @@ struct SNoIsEqual; a; end
117120
@test NoSelfCtor(NoSelfCtor(1)).a === NoSelfCtor(1)
118121
end
119122

120-
@enum Color Red Blue Green
123+
@enum EnumNoBatteries UsesGas UsesPlug UsesMuscles
121124

125+
@enum Color Red Blue Green
122126
@enumbatteries Color string_conversion = true symbol_conversion = true selfconstructor = false
123127

124128
@enum Shape Circle Square
125129
@enumbatteries Shape symbol_conversion =true
126130

127131
@testset "@enumbatteries" begin
132+
@test SH.hasbatteries(Color)
133+
@test !SH.hasbatteries(EnumNoBatteries)
128134
@test Red === @inferred Color("Red")
129135
@test Red === @inferred convert(Color, "Red")
130136
@test "Red" === @inferred String(Red)

0 commit comments

Comments
 (0)