From f29b5c9d2c3547bd86045113ad1231f94eef7e61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomas=20Franze=CC=81n?= Date: Wed, 14 Feb 2024 21:06:58 +0100 Subject: [PATCH] Extract parts of Environment.swift to separate files --- .../Environment/DefaultEnvironment.swift | 8 +++ .../SwiftSCAD/Environment/Environment.swift | 62 ------------------- .../Environment/EnvironmentModifier.swift | 39 ++++++++++++ .../Environment/EnvironmentReader.swift | 37 +++++++++++ .../SwiftSCAD/Operations/Output/Save.swift | 8 +-- 5 files changed, 88 insertions(+), 66 deletions(-) create mode 100644 Sources/SwiftSCAD/Environment/DefaultEnvironment.swift create mode 100644 Sources/SwiftSCAD/Environment/EnvironmentModifier.swift create mode 100644 Sources/SwiftSCAD/Environment/EnvironmentReader.swift diff --git a/Sources/SwiftSCAD/Environment/DefaultEnvironment.swift b/Sources/SwiftSCAD/Environment/DefaultEnvironment.swift new file mode 100644 index 0000000..f9021b3 --- /dev/null +++ b/Sources/SwiftSCAD/Environment/DefaultEnvironment.swift @@ -0,0 +1,8 @@ +import Foundation + +internal extension Environment { + static var defaultEnvironment: Environment { + Environment() + .withFacets(.defaults) + } +} diff --git a/Sources/SwiftSCAD/Environment/Environment.swift b/Sources/SwiftSCAD/Environment/Environment.swift index b48376b..02341bf 100644 --- a/Sources/SwiftSCAD/Environment/Environment.swift +++ b/Sources/SwiftSCAD/Environment/Environment.swift @@ -35,65 +35,3 @@ public extension Environment { } } } - -internal struct EnvironmentReader2D: Geometry2D { - let body: (Environment) -> Geometry2D - - func scadString(in environment: Environment) -> String { - body(environment).scadString(in: environment) - } -} - -internal struct EnvironmentReader3D: Geometry3D { - let body: (Environment) -> Geometry3D - - func scadString(in environment: Environment) -> String { - body(environment).scadString(in: environment) - } -} - -internal func EnvironmentReader(@UnionBuilder2D body: @escaping (Environment) -> Geometry2D) -> Geometry2D { - EnvironmentReader2D(body: body) -} - -internal func EnvironmentReader(@UnionBuilder3D body: @escaping (Environment) -> Geometry3D) -> Geometry3D { - EnvironmentReader3D(body: body) -} - -struct EnvironmentModifier2D: Geometry2D { - let body: Geometry2D - let modification: (Environment) -> Environment - - func scadString(in environment: Environment) -> String { - body.scadString(in: modification(environment)) - } -} - -struct EnvironmentModifier3D: Geometry3D { - let body: Geometry3D - let modification: (Environment) -> Environment - - func scadString(in environment: Environment) -> String { - body.scadString(in: modification(environment)) - } -} - -public extension Geometry2D { - func withEnvironment(_ modifier: @escaping (Environment) -> Environment) -> Geometry2D { - EnvironmentModifier2D(body: self, modification: modifier) - } - - func readingEnvironment(@UnionBuilder2D _ body: @escaping (Environment) -> Geometry2D) -> Geometry2D { - EnvironmentReader2D(body: body) - } -} - -public extension Geometry3D { - func withEnvironment(_ modifier: @escaping (Environment) -> Environment) -> Geometry3D { - EnvironmentModifier3D(body: self, modification: modifier) - } - - func readingEnvironment(@UnionBuilder3D _ body: @escaping (Environment) -> Geometry3D) -> Geometry3D { - EnvironmentReader3D(body: body) - } -} diff --git a/Sources/SwiftSCAD/Environment/EnvironmentModifier.swift b/Sources/SwiftSCAD/Environment/EnvironmentModifier.swift new file mode 100644 index 0000000..a42750a --- /dev/null +++ b/Sources/SwiftSCAD/Environment/EnvironmentModifier.swift @@ -0,0 +1,39 @@ +import Foundation + +struct EnvironmentModifier2D: Geometry2D { + let body: Geometry2D + let modification: (Environment) -> Environment + + func scadString(in environment: Environment) -> String { + body.scadString(in: modification(environment)) + } +} + +struct EnvironmentModifier3D: Geometry3D { + let body: Geometry3D + let modification: (Environment) -> Environment + + func scadString(in environment: Environment) -> String { + body.scadString(in: modification(environment)) + } +} + +public extension Geometry2D { + func withEnvironment(_ modifier: @escaping (Environment) -> Environment) -> Geometry2D { + EnvironmentModifier2D(body: self, modification: modifier) + } + + internal func withEnvironment(_ environment: Environment) -> Geometry2D { + withEnvironment { _ in environment } + } +} + +public extension Geometry3D { + func withEnvironment(_ modifier: @escaping (Environment) -> Environment) -> Geometry3D { + EnvironmentModifier3D(body: self, modification: modifier) + } + + internal func withEnvironment(_ environment: Environment) -> Geometry3D { + withEnvironment { _ in environment } + } +} diff --git a/Sources/SwiftSCAD/Environment/EnvironmentReader.swift b/Sources/SwiftSCAD/Environment/EnvironmentReader.swift new file mode 100644 index 0000000..187cd3b --- /dev/null +++ b/Sources/SwiftSCAD/Environment/EnvironmentReader.swift @@ -0,0 +1,37 @@ +import Foundation + +internal struct EnvironmentReader2D: Geometry2D { + let body: (Environment) -> Geometry2D + + func scadString(in environment: Environment) -> String { + body(environment).scadString(in: environment) + } +} + +internal struct EnvironmentReader3D: Geometry3D { + let body: (Environment) -> Geometry3D + + func scadString(in environment: Environment) -> String { + body(environment).scadString(in: environment) + } +} + +internal func EnvironmentReader(@UnionBuilder2D body: @escaping (Environment) -> Geometry2D) -> Geometry2D { + EnvironmentReader2D(body: body) +} + +internal func EnvironmentReader(@UnionBuilder3D body: @escaping (Environment) -> Geometry3D) -> Geometry3D { + EnvironmentReader3D(body: body) +} + +public extension Geometry2D { + func readingEnvironment(@UnionBuilder2D _ body: @escaping (Environment) -> Geometry2D) -> Geometry2D { + EnvironmentReader2D(body: body) + } +} + +public extension Geometry3D { + func readingEnvironment(@UnionBuilder3D _ body: @escaping (Environment) -> Geometry3D) -> Geometry3D { + EnvironmentReader3D(body: body) + } +} diff --git a/Sources/SwiftSCAD/Operations/Output/Save.swift b/Sources/SwiftSCAD/Operations/Output/Save.swift index 2d7a8a2..90cce09 100644 --- a/Sources/SwiftSCAD/Operations/Output/Save.swift +++ b/Sources/SwiftSCAD/Operations/Output/Save.swift @@ -21,14 +21,14 @@ public extension Geometry3D { /// Saves the 3D geometry to a specified path. /// - Parameter path: The path of the file to save the geometry to. @discardableResult func save(to path: String) -> Geometry3D { - self.usingDefaultFacets().save(to: path, using: Environment()) + save(to: path, using: .defaultEnvironment) return self } /// Saves the 3D geometry to a specified URL. /// - Parameter url: The URL of the file to save the geometry to. @discardableResult func save(to url: URL) -> Geometry3D { - self.usingDefaultFacets().save(to: url, using: Environment()) + save(to: url, using: .defaultEnvironment) return self } } @@ -37,14 +37,14 @@ public extension Geometry2D { /// Saves the 2D geometry to a specified path. /// - Parameter path: The path of the file to save the geometry to. @discardableResult func save(to path: String) -> Geometry2D { - self.usingDefaultFacets().save(to: path, using: Environment()) + save(to: path, using: .defaultEnvironment) return self } /// Saves the 2D geometry to a specified URL. /// - Parameter url: The URL of the file to save the geometry to. @discardableResult func save(to url: URL) -> Geometry2D { - self.usingDefaultFacets().save(to: url, using: Environment()) + save(to: url, using: .defaultEnvironment) return self } }