@@ -33,7 +33,6 @@ function print_toml_escaped(io::IO, s::AbstractString)
33
33
end
34
34
end
35
35
36
- const MbyFunc = Union{Function, Nothing}
37
36
const TOMLValue = Union{AbstractVector, AbstractDict, Bool, Integer, AbstractFloat, AbstractString,
38
37
Dates. DateTime, Dates. Time, Dates. Date, Base. TOML. DateTime, Base. TOML. Time, Base. TOML. Date}
39
38
@@ -59,8 +58,8 @@ function printkey(io::IO, keys::Vector{String})
59
58
end
60
59
end
61
60
62
- function to_toml_value (f:: MbyFunc , value)
63
- if f === nothing
61
+ function to_toml_value (@nospecialize ( f:: Function ) , value)
62
+ if f === identity
64
63
error (" type `$(typeof (value)) ` is not a valid TOML type, pass a conversion function to `TOML.print`" )
65
64
end
66
65
toml_value = f (value)
75
74
# #########
76
75
77
76
# Fallback
78
- function printvalue (f:: MbyFunc , io:: IO , value, sorted:: Bool )
77
+ function printvalue (f:: Function , io:: IO , value, sorted:: Bool )
79
78
toml_value = to_toml_value (f, value)
80
79
@invokelatest printvalue (f, io, toml_value, sorted)
81
80
end
82
81
83
- function printvalue (f:: MbyFunc , io:: IO , value:: AbstractVector , sorted:: Bool )
82
+ function printvalue (f:: Function , io:: IO , value:: AbstractVector , sorted:: Bool )
84
83
Base. print (io, " [" )
85
84
for (i, x) in enumerate (value)
86
85
i != 1 && Base. print (io, " , " )
@@ -89,7 +88,7 @@ function printvalue(f::MbyFunc, io::IO, value::AbstractVector, sorted::Bool)
89
88
Base. print (io, " ]" )
90
89
end
91
90
92
- function printvalue (f:: MbyFunc , io:: IO , value:: TOMLValue , sorted:: Bool )
91
+ function printvalue (f:: Function , io:: IO , value:: TOMLValue , sorted:: Bool )
93
92
value isa Base. TOML. DateTime && (value = Dates. DateTime (value))
94
93
value isa Base. TOML. Time && (value = Dates. Time (value))
95
94
value isa Base. TOML. Date && (value = Dates. Date (value))
@@ -117,7 +116,7 @@ function print_integer(io::IO, value::Integer)
117
116
return
118
117
end
119
118
120
- function print_inline_table (f:: MbyFunc , io:: IO , value:: AbstractDict , sorted:: Bool )
119
+ function print_inline_table (f:: Function , io:: IO , value:: AbstractDict , sorted:: Bool )
121
120
vkeys = collect (keys (value))
122
121
if sorted
123
122
sort! (vkeys)
@@ -138,15 +137,14 @@ end
138
137
# Tables #
139
138
# #########
140
139
141
- is_table (value) = isa (value, AbstractDict)
142
- is_array_of_tables (value) = isa (value, AbstractArray) &&
143
- length (value) > 0 && (
144
- isa (value, AbstractArray{<: AbstractDict }) ||
145
- all (v -> isa (v, AbstractDict), value)
146
- )
147
- is_tabular (value) = is_table (value) || @invokelatest (is_array_of_tables (value))
140
+ is_table (@nospecialize (value)) = isa (value, AbstractDict)
141
+ is_array_of_tables (@nospecialize (value)) =
142
+ isa (value, AbstractArray) &&
143
+ length (value) > 0 && (isa (value, AbstractArray{<: AbstractDict }) ||
144
+ all (v -> isa (v, AbstractDict), value))
145
+ is_tabular (@nospecialize (value)) = is_table (value) || @invokelatest (is_array_of_tables (value))
148
146
149
- function print_table (f:: MbyFunc , io:: IO , a:: AbstractDict ,
147
+ function print_table (f:: Function , io:: IO , a:: AbstractDict ,
150
148
ks:: Vector{String} = String[];
151
149
indent:: Int = 0 ,
152
150
first_block:: Bool = true ,
228
226
# API #
229
227
# ######
230
228
231
- print (f:: MbyFunc , io:: IO , a:: AbstractDict ; sorted:: Bool = false , by= identity, inline_tables:: IdSet{<:AbstractDict} = IdSet {Dict{String}} ()) = print_table (f, io, a; sorted, by, inline_tables)
232
- print (f:: MbyFunc , a:: AbstractDict ; sorted:: Bool = false , by= identity, inline_tables:: IdSet{<:AbstractDict} = IdSet {Dict{String}} ()) = print (f, stdout , a; sorted, by, inline_tables)
233
- print (io:: IO , a:: AbstractDict ; sorted:: Bool = false , by= identity, inline_tables:: IdSet{<:AbstractDict} = IdSet {Dict{String}} ()) = print_table (nothing , io, a; sorted, by, inline_tables)
234
- print ( a:: AbstractDict ; sorted:: Bool = false , by= identity, inline_tables:: IdSet{<:AbstractDict} = IdSet {Dict{String}} ()) = print (nothing , stdout , a; sorted, by, inline_tables)
229
+ print (f:: Function , io:: IO , a:: AbstractDict ; sorted:: Bool = false , by= identity, inline_tables:: IdSet{<:AbstractDict} = IdSet {Dict{String}} ()) =
230
+ print_table (f, io, a; sorted, by, inline_tables)
231
+ print (f:: Function , a:: AbstractDict ; sorted:: Bool = false , by= identity, inline_tables:: IdSet{<:AbstractDict} = IdSet {Dict{String}} ()) =
232
+ print (f, stdout , a; sorted, by, inline_tables)
233
+ print (io:: IO , a:: AbstractDict ; sorted:: Bool = false , by= identity, inline_tables:: IdSet{<:AbstractDict} = IdSet {Dict{String}} ()) =
234
+ print_table (identity, io, a; sorted, by, inline_tables)
235
+ print (a:: AbstractDict ; sorted:: Bool = false , by= identity, inline_tables:: IdSet{<:AbstractDict} = IdSet {Dict{String}} ()) =
236
+ print (identity, stdout , a; sorted, by, inline_tables)
0 commit comments