Skip to content

Commit e5eddae

Browse files
committed
feat: new reinforce methods on builder & ConfigInitializable API upgrade
1 parent 7a51150 commit e5eddae

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

Sources/FunctionalBuilder/Builder.swift

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,36 @@ public struct Builder<Base> {
1212
public func apply() where Base: AnyObject { _ = build() }
1313

1414
@inlinable
15-
public func reinforce(_ transform: @escaping (inout Base) -> Void) -> Builder {
15+
public func reinforce(
16+
_ transform: @escaping (inout Base) -> Void
17+
) -> Builder {
1618
Builder(build()).set(transform)
1719
}
1820

21+
@inlinable
22+
public func reinforce<T0>(
23+
_ t0: T0,
24+
_ transform: @escaping (inout Base, T0) -> Void
25+
) -> Builder {
26+
reinforce { base in transform(&base, t0) }
27+
}
28+
29+
@inlinable
30+
public func reinforce<T0, T1>(
31+
_ t0: T0, t1: T1,
32+
_ transform: @escaping (inout Base, T0, T1) -> Void
33+
) -> Builder {
34+
reinforce { base in transform(&base, t0, t1) }
35+
}
36+
37+
@inlinable
38+
public func reinforce<T0, T1, T2>(
39+
_ t0: T0, _ t1: T1, _ t2: T2,
40+
_ transform: @escaping (inout Base, T0, T1, T2) -> Void
41+
) -> Builder {
42+
reinforce { base in transform(&base, t0, t1, t2) }
43+
}
44+
1945
public init(_ initialValue: @escaping @autoclosure () -> Base) {
2046
self.init(
2147
initialValue,
@@ -75,6 +101,15 @@ extension Builder {
75101
)
76102
}
77103

104+
public func callAsFunction(if condition: Bool, _ value: @escaping @autoclosure () -> Value) -> Builder {
105+
Builder(
106+
_block.builder._initialValue,
107+
_block.builder._configurator.appendingConfiguration { base in
108+
_block.keyPath.embed(value(), in: base)
109+
}
110+
)
111+
}
112+
78113
public func callAsFunction(_ value: @escaping @autoclosure () -> Value) -> Builder {
79114
Builder(
80115
_block.builder._initialValue,

Sources/FunctionalConfigurator/ConfigIntializable.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ extension ConfigInitializable {
1111
/// Instantiates a new object with specified configuration
1212
///
1313
/// Note: Type must implement custom intializer with no parameters, even if it inherits from NSObject
14-
public init(_ configuration: (Config.Type) -> Config) {
15-
self.init(configuration(Config.self))
14+
public init(_ configuration: (Config) -> Config) {
15+
self.init(configuration(Config()))
1616
}
1717

1818
/// Instantiates a new object with specified configuration

0 commit comments

Comments
 (0)