diff --git a/Sources/P4/Support.swift b/Sources/P4/Support.swift index ee47fbb..d054ce0 100644 --- a/Sources/P4/Support.swift +++ b/Sources/P4/Support.swift @@ -32,8 +32,8 @@ public struct Nothing: CustomStringConvertible { } -public enum Result: Equatable, CustomStringConvertible { - case Ok(T) +public enum Result: Equatable { + case Ok(OKT) case Error(Error) public static func == (lhs: Result, rhs: Result) -> Bool { @@ -53,7 +53,9 @@ public enum Result: Equatable, CustomStringConvertible { } return nil } +} +extension Result where OKT: CustomStringConvertible { public var description: String { switch self { case Result.Error(let e): @@ -64,6 +66,17 @@ public enum Result: Equatable, CustomStringConvertible { } } +extension Result { + public var description: String { + switch self { + case Result.Error(let e): + return e.msg + case Result.Ok(_): + return "Ok" + } + } +} + @freestanding(expression) public macro RequireOkResult(_: Result) -> Bool = #externalMacro(module: "Macros", type: "RequireResult") @freestanding(expression) public macro RequireErrorResult(_: Error, _: Result) -> Bool = diff --git a/Tests/p4lmTests/SupportTests.swift b/Tests/p4lmTests/SupportTests.swift new file mode 100644 index 0000000..30ab8e1 --- /dev/null +++ b/Tests/p4lmTests/SupportTests.swift @@ -0,0 +1,44 @@ +// p4rse, Copyright 2026, Will Hawkins +// +// This file is part of p4rse. + +// This file is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +import Foundation +import P4 +import Macros +import SwiftTreeSitter +import Testing +import TreeSitter +import TreeSitterP4 + +@testable import Parser + +struct NotStringConvertible {} + +struct StringConvertible: CustomStringConvertible { + public var description: String { + return "CONVERTED" + } +} + +@Test func test_result_type_description_not_convertible() async throws { + let result: Result = Result.Ok(NotStringConvertible()); + #expect(result.description == "Ok") +} + +@Test func test_result_type_description_convertible() async throws { + let result: Result = Result.Ok(StringConvertible()); + #expect(result.description == "CONVERTED") +} \ No newline at end of file