Skip to content

Commit

Permalink
Extract parts of Environment.swift to separate files
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasf committed Feb 14, 2024
1 parent d54def1 commit f29b5c9
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 66 deletions.
8 changes: 8 additions & 0 deletions Sources/SwiftSCAD/Environment/DefaultEnvironment.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import Foundation

internal extension Environment {
static var defaultEnvironment: Environment {
Environment()
.withFacets(.defaults)
}
}
62 changes: 0 additions & 62 deletions Sources/SwiftSCAD/Environment/Environment.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
39 changes: 39 additions & 0 deletions Sources/SwiftSCAD/Environment/EnvironmentModifier.swift
Original file line number Diff line number Diff line change
@@ -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 }
}
}
37 changes: 37 additions & 0 deletions Sources/SwiftSCAD/Environment/EnvironmentReader.swift
Original file line number Diff line number Diff line change
@@ -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)
}
}
8 changes: 4 additions & 4 deletions Sources/SwiftSCAD/Operations/Output/Save.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}
Expand All @@ -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
}
}

0 comments on commit f29b5c9

Please sign in to comment.