|
|
@@ -32,7 +32,7 @@ enum Status : String, CaseIterable, Identifiable, Codable {
|
|
|
}
|
|
|
|
|
|
@Model
|
|
|
-final class SubTask {
|
|
|
+final class SubTask : Codable {
|
|
|
var name: String
|
|
|
var notes: String = ""
|
|
|
var status: Status = Status.Todo
|
|
|
@@ -50,6 +50,22 @@ final class SubTask {
|
|
|
}
|
|
|
return rval
|
|
|
}
|
|
|
+
|
|
|
+ enum CodingKeys : CodingKey { case name, notes, status }
|
|
|
+
|
|
|
+ required init(from decoder: any Decoder) throws {
|
|
|
+ let container = try decoder.container(keyedBy: CodingKeys.self)
|
|
|
+ name = try container.decode(String.self, forKey: .name)
|
|
|
+ notes = try container.decode(String.self, forKey: .notes)
|
|
|
+ status = try container.decode(Status.self, forKey: .status)
|
|
|
+ }
|
|
|
+
|
|
|
+ func encode(to encoder: any Encoder) throws {
|
|
|
+ var container = encoder.container(keyedBy: CodingKeys.self)
|
|
|
+ try container.encode(name, forKey: .name)
|
|
|
+ try container.encode(notes, forKey: .notes)
|
|
|
+ try container.encode(status, forKey: .status)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
struct Tag : Codable, Identifiable {
|
|
|
@@ -61,7 +77,7 @@ struct Tag : Codable, Identifiable {
|
|
|
}
|
|
|
|
|
|
@Model
|
|
|
-final class Task {
|
|
|
+final class Task : Codable {
|
|
|
var name: String
|
|
|
var tags: [Tag] = []
|
|
|
var subtasks: [SubTask] = []
|
|
|
@@ -83,4 +99,24 @@ final class Task {
|
|
|
rval += subtasks.map({ $0.yaml(indent + 1) }).joined()
|
|
|
return rval
|
|
|
}
|
|
|
+
|
|
|
+ enum CodingKeys : CodingKey { case name, tags, subtasks, notes, status }
|
|
|
+
|
|
|
+ required init(from decoder: any Decoder) throws {
|
|
|
+ let container = try decoder.container(keyedBy: CodingKeys.self)
|
|
|
+ name = try container.decode(String.self, forKey: .name)
|
|
|
+ tags = try container.decode([Tag].self, forKey: .tags)
|
|
|
+ subtasks = try container.decode([SubTask].self, forKey: .subtasks)
|
|
|
+ notes = try container.decode(String.self, forKey: .notes)
|
|
|
+ status = try container.decode(Status.self, forKey: .status)
|
|
|
+ }
|
|
|
+
|
|
|
+ func encode(to encoder: any Encoder) throws {
|
|
|
+ var container = encoder.container(keyedBy: CodingKeys.self)
|
|
|
+ try container.encode(name, forKey: .name)
|
|
|
+ try container.encode(tags, forKey: .tags)
|
|
|
+ try container.encode(subtasks, forKey: .subtasks)
|
|
|
+ try container.encode(notes, forKey: .notes)
|
|
|
+ try container.encode(status, forKey: .status)
|
|
|
+ }
|
|
|
}
|