╭ changed ─╮ │src/ui.zig│ ╰──────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────╮ │1709 pub const FormFeedback = union(enum) { │ │1710 pub const LoginFailure = enum { unknown_user, wrong_password }; │ │1711 pub const ThreadFailure = enum { required_title }; │ │1712 - pub const PatchFailure = enum { required_title, invalid_target_branch };│ │1712 + pub const PatchFailure = enum { │ │1713 + required_title, │ │1714 + invalid_target_branch, │ │1715 + invalid_source_branch, │ │1716 + unrelated_branches, │ │1717 + │ │1718 + pub fn fromError(err: anyerror) ?PatchFailure { │ │1719 + return switch (err) { │ │1720 + error.InvalidTargetBranch => .invalid_target_branch, │ │1721 + error.InvalidSourceBranch => .invalid_source_branch, │ │1722 + error.UnrelatedBranches => .unrelated_branches, │ │1723 + else => null, │ │1724 + }; │ │1725 + } │ │1726 + }; │ │1727 │ │1728 login: struct { │ │1729 failure: LoginFailure, │ ╰──────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────╮ │1744 tags: []const u8, │ │1745 description: []const u8, │ │1746 target_branch: []const u8, │ │1747 + source_branch: []const u8 = "",│ │1748 + branch_source: bool = false, │ │1749 } = null, │ │1750 }, │ │1751 discussion: struct { │ ╰─────────────────────────────────────────────────────╯