diff --git a/data/system-hooks/build.json b/data/system-hooks/build.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/build.json
@@ -0,0 +1,67 @@
+{
+  "object_kind": "build",
+  "ref": "master",
+  "tag": false,
+  "before_sha": "19d1543c2f5ea888e3c69019bd7e3daff228fcbc",
+  "sha": "12fc8bb3a8b3f52c5bffa020e6d362027c724359",
+  "retries_count": 0,
+  "build_id": 47423,
+  "build_name": "junit",
+  "build_stage": "test",
+  "build_status": "created",
+  "build_created_at": "2024-11-01 20:15:34 UTC",
+  "build_started_at": null,
+  "build_finished_at": null,
+  "build_duration": null,
+  "build_queued_duration": null,
+  "build_allow_failure": false,
+  "build_failure_reason": "unknown_failure",
+  "pipeline_id": 32611,
+  "runner": null,
+  "project_id": 25039,
+  "project_name": "Joe / repo-name",
+  "user": {
+    "id": 2682,
+    "name": "Joe",
+    "username": "joe",
+    "avatar_url": "https://secure.gravatar.com/avatar/abcde",
+    "email": "[REDACTED]"
+  },
+  "commit": {
+    "id": 32611,
+    "name": null,
+    "sha": "12fc8bb3a8b3f52c5bffa020e6d362027c724359",
+    "message": "the message",
+    "author_name": "Joe",
+    "author_email": "joe@gmail.com",
+    "author_url": "mailto:joe@gmail.com",
+    "status": "created",
+    "duration": null,
+    "started_at": null,
+    "finished_at": null
+  },
+  "repository": {
+    "name": "repo-name",
+    "url": "git@example.com:joe/repo-name.git",
+    "description": null,
+    "homepage": "https://example.com/joe/repo-name",
+    "git_http_url": "https://example.com/joe/repo-name.git",
+    "git_ssh_url": "git@example.com:joe/repo-name.git",
+    "visibility_level": 0
+  },
+  "project": {
+    "id": 25039,
+    "name": "repo-name",
+    "description": null,
+    "web_url": "https://example.com/joe/repo-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/repo-name.git",
+    "git_http_url": "https://example.com/joe/repo-name.git",
+    "namespace": "Joe",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/repo-name",
+    "default_branch": "master",
+    "ci_config_path": null
+  },
+  "environment": null
+}
diff --git a/data/system-hooks/build2.json b/data/system-hooks/build2.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/build2.json
@@ -0,0 +1,74 @@
+{
+  "object_kind": "build",
+  "ref": "master",
+  "tag": false,
+  "before_sha": "edcba",
+  "sha": "abcde",
+  "retries_count": 0,
+  "build_id": 47500,
+  "build_name": "junit",
+  "build_stage": "test",
+  "build_status": "failed",
+  "build_created_at": "2024-11-02 18:29:00 UTC",
+  "build_started_at": "2024-11-02 18:29:01 UTC",
+  "build_finished_at": "2024-11-02 18:29:06 UTC",
+  "build_duration": 4.543246,
+  "build_queued_duration": 1.08065,
+  "build_allow_failure": false,
+  "build_failure_reason": "script_failure",
+  "pipeline_id": 32685,
+  "runner": {
+    "id": 17,
+    "description": "",
+    "runner_type": "instance_type",
+    "active": true,
+    "is_shared": true,
+    "tags": []
+  },
+  "project_id": 25078,
+  "project_name": "joe/proj-name",
+  "user": {
+    "id": 742,
+    "name": "Goddard, Jamie",
+    "username": "jg2078",
+    "avatar_url": "https://secure.gravatar.com/avatar/abc",
+    "email": "[REDACTED]"
+  },
+  "commit": {
+    "id": 32685,
+    "name": null,
+    "sha": "abcde",
+    "message": "message name",
+    "author_name": "joe",
+    "author_email": "joe@gmail.com",
+    "author_url": "mailto:joe@gmail.com",
+    "status": "failed",
+    "duration": 4,
+    "started_at": "2024-11-02 18:29:01 UTC",
+    "finished_at": "2024-11-02 18:29:06 UTC"
+  },
+  "repository": {
+    "name": "proj-name",
+    "url": "git@example.com:joe/proj-name.git",
+    "description": null,
+    "homepage": "https://example.com/joe/proj-name",
+    "git_http_url": "https://example.com/joe/proj-name.git",
+    "git_ssh_url": "git@example.com:joe/proj-name.git",
+    "visibility_level": 0
+  },
+  "project": {
+    "id": 25078,
+    "name": "proj-name",
+    "description": null,
+    "web_url": "https://example.com/joe/proj-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/proj-name.git",
+    "git_http_url": "https://example.com/joe/proj-name.git",
+    "namespace": "Joe",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/proj-name",
+    "default_branch": "master",
+    "ci_config_path": null
+  },
+  "environment": null
+}
diff --git a/data/system-hooks/group-created2.json b/data/system-hooks/group-created2.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/group-created2.json
@@ -0,0 +1,9 @@
+{
+  "created_at": "2024-11-22T12:03:34Z",
+  "updated_at": "2024-11-22T12:03:34Z",
+  "event_name": "group_create",
+  "name": "the-name",
+  "path": "the-path",
+  "full_path": "namespace1/the-path",
+  "group_id": 31780
+}
diff --git a/data/system-hooks/issue1.json b/data/system-hooks/issue1.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/issue1.json
@@ -0,0 +1,124 @@
+{
+  "object_kind": "issue",
+  "event_type": "issue",
+  "user": {
+    "id": 2052,
+    "name": "Joe",
+    "username": "ma2305",
+    "avatar_url": "https://secure.gravatar.com/avatar/abcde",
+    "email": "[REDACTED]"
+  },
+  "project": {
+    "id": 19102,
+    "name": "proj-name",
+    "description": "",
+    "web_url": "https://example.com/joe123/proj-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe123/proj-name.git",
+    "git_http_url": "https://example.com/joe123/proj-name.git",
+    "namespace": "Joe",
+    "visibility_level": 0,
+    "path_with_namespace": "joe123/proj-name",
+    "default_branch": "master",
+    "ci_config_path": null,
+    "homepage": "https://example.com/joe123/proj-name",
+    "url": "git@example.com:joe123/proj-name.git",
+    "ssh_url": "git@example.com:joe123/proj-name.git",
+    "http_url": "https://example.com/joe123/proj-name.git"
+  },
+  "object_attributes": {
+    "author_id": 2052,
+    "closed_at": "2024-11-02 19:47:16 UTC",
+    "confidential": false,
+    "created_at": "2024-11-02 05:45:09 UTC",
+    "description": "",
+    "discussion_locked": null,
+    "due_date": null,
+    "id": 2183,
+    "iid": 40,
+    "last_edited_at": null,
+    "last_edited_by_id": null,
+    "milestone_id": null,
+    "moved_to_id": null,
+    "duplicated_to_id": null,
+    "project_id": 19102,
+    "relative_position": 20520,
+    "state_id": 2,
+    "time_estimate": 0,
+    "title": "Issue title",
+    "updated_at": "2024-11-02 19:47:17 UTC",
+    "updated_by_id": null,
+    "type": "Issue",
+    "url": "https://example.com/joe123/proj-name/-/issues/40",
+    "total_time_spent": 0,
+    "time_change": 0,
+    "human_total_time_spent": null,
+    "human_time_change": null,
+    "human_time_estimate": null,
+    "assignee_ids": [
+      2052
+    ],
+    "assignee_id": 2052,
+    "labels": [
+      {
+        "id": 385,
+        "title": "Stage 3",
+        "color": "#cd5b45",
+        "project_id": 19102,
+        "created_at": "2024-11-02 05:42:30 UTC",
+        "updated_at": "2024-11-02 05:42:30 UTC",
+        "template": false,
+        "description": null,
+        "type": "ProjectLabel",
+        "group_id": null
+      }
+    ],
+    "state": "closed",
+    "severity": "unknown",
+    "customer_relations_contacts": [],
+    "action": "close"
+  },
+  "labels": [
+    {
+      "id": 385,
+      "title": "Stage 3",
+      "color": "#cd5b45",
+      "project_id": 19102,
+      "created_at": "2024-11-02 05:42:30 UTC",
+      "updated_at": "2024-11-02 05:42:30 UTC",
+      "template": false,
+      "description": null,
+      "type": "ProjectLabel",
+      "group_id": null
+    }
+  ],
+  "changes": {
+    "closed_at": {
+      "previous": null,
+      "current": "2024-11-02 19:47:16 UTC"
+    },
+    "state_id": {
+      "previous": 1,
+      "current": 2
+    },
+    "updated_at": {
+      "previous": "2024-11-02 05:45:09 UTC",
+      "current": "2024-11-02 19:47:17 UTC"
+    }
+  },
+  "repository": {
+    "name": "proj-name",
+    "url": "git@example.com:joe123/proj-name.git",
+    "description": "",
+    "homepage": "https://example.com/joe123/proj-name"
+  },
+  "assignees": [
+    {
+      "id": 2052,
+      "name": "Joe",
+      "username": "joe123",
+      "avatar_url": "https://secure.gravatar.com/avatar/abcde",
+      "email": "[REDACTED]"
+    }
+  ]
+}
diff --git a/data/system-hooks/issue2.json b/data/system-hooks/issue2.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/issue2.json
@@ -0,0 +1,144 @@
+{
+  "object_kind": "issue",
+  "event_type": "issue",
+  "user": {
+    "id": 2617,
+    "name": "Joe",
+    "username": "joe",
+    "avatar_url": "https://secure.gravatar.com/avatar/abc",
+    "email": "[REDACTED]"
+  },
+  "project": {
+    "id": 20125,
+    "name": "proj-name",
+    "description": "the description",
+    "web_url": "https://example.com/joe/proj-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/proj-name.git",
+    "git_http_url": "https://example.com/joe/proj-name.git",
+    "namespace": "Joe",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/proj-name",
+    "default_branch": "master",
+    "ci_config_path": null,
+    "homepage": "https://example.com/joe/proj-name",
+    "url": "git@example.com:joe/proj-name.git",
+    "ssh_url": "git@example.com:joe/proj-name.git",
+    "http_url": "https://example.com/joe/proj-name.git"
+  },
+  "object_attributes": {
+    "author_id": 2617,
+    "closed_at": null,
+    "confidential": false,
+    "created_at": "2024-11-09 00:44:06 UTC",
+    "description": "issue description",
+    "discussion_locked": null,
+    "due_date": null,
+    "id": 2286,
+    "iid": 25,
+    "last_edited_at": null,
+    "last_edited_by_id": null,
+    "milestone_id": null,
+    "moved_to_id": null,
+    "duplicated_to_id": null,
+    "project_id": 20125,
+    "relative_position": null,
+    "state_id": 1,
+    "time_estimate": 0,
+    "title": "Class Diagram - stage 3",
+    "updated_at": "2024-11-09 00:44:06 UTC",
+    "updated_by_id": null,
+    "type": "Issue",
+    "url": "https://example.com/joe/proj-name/-/issues/25",
+    "total_time_spent": 0,
+    "time_change": 0,
+    "human_total_time_spent": null,
+    "human_time_change": null,
+    "human_time_estimate": null,
+    "assignee_ids": [
+      2617
+    ],
+    "assignee_id": 2617,
+    "labels": [
+      {
+        "id": 380,
+        "title": "the label title",
+        "color": "#9400d3",
+        "project_id": 20125,
+        "created_at": "2024-10-30 16:25:49 UTC",
+        "updated_at": "2024-10-30 16:25:49 UTC",
+        "template": false,
+        "description": null,
+        "type": "ProjectLabel",
+        "group_id": null
+      }
+    ],
+    "state": "opened",
+    "severity": "unknown",
+    "customer_relations_contacts": [],
+    "action": "open"
+  },
+  "labels": [
+    {
+      "id": 380,
+      "title": "the label title",
+      "color": "#9400d3",
+      "project_id": 20125,
+      "created_at": "2024-10-30 16:25:49 UTC",
+      "updated_at": "2024-10-30 16:25:49 UTC",
+      "template": false,
+      "description": null,
+      "type": "ProjectLabel",
+      "group_id": null
+    }
+  ],
+  "changes": {
+    "author_id": {
+      "previous": null,
+      "current": 2617
+    },
+    "created_at": {
+      "previous": null,
+      "current": "2024-11-09 00:44:06 UTC"
+    },
+    "description": {
+      "previous": null,
+      "current": "issue description"
+    },
+    "id": {
+      "previous": null,
+      "current": 2286
+    },
+    "iid": {
+      "previous": null,
+      "current": 25
+    },
+    "project_id": {
+      "previous": null,
+      "current": 20125
+    },
+    "title": {
+      "previous": null,
+      "current": "new issue title"
+    },
+    "updated_at": {
+      "previous": null,
+      "current": "2024-11-09 00:44:06 UTC"
+    }
+  },
+  "repository": {
+    "name": "proj-name",
+    "url": "git@example.com:joe/proj-name.git",
+    "description": "the description",
+    "homepage": "https://example.com/joe/proj-name"
+  },
+  "assignees": [
+    {
+      "id": 2617,
+      "name": "Joe",
+      "username": "joe",
+      "avatar_url": "https://secure.gravatar.com/avatar/abc",
+      "email": "[REDACTED]"
+    }
+  ]
+}
diff --git a/data/system-hooks/issue3.json b/data/system-hooks/issue3.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/issue3.json
@@ -0,0 +1,124 @@
+{
+  "object_kind": "issue",
+  "event_type": "issue",
+  "user": {
+    "id": 2947,
+    "name": "Joe",
+    "username": "hr3000",
+    "avatar_url": "https://secure.gravatar.com/avatar/abc",
+    "email": "[REDACTED]"
+  },
+  "project": {
+    "id": 20064,
+    "name": "proj-name",
+    "description": "",
+    "web_url": "https://example.com/joe/proj-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/proj-name.git",
+    "git_http_url": "https://example.com/joe/proj-name.git",
+    "namespace": "Joe",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/proj-name",
+    "default_branch": "master",
+    "ci_config_path": null,
+    "homepage": "https://example.com/joe/proj-name",
+    "url": "git@example.com:joe/proj-name.git",
+    "ssh_url": "git@example.com:joe/proj-name.git",
+    "http_url": "https://example.com/joe/proj-name.git"
+  },
+  "object_attributes": {
+    "author_id": 2947,
+    "closed_at": null,
+    "confidential": false,
+    "created_at": "2024-11-22 21:57:16 UTC",
+    "description": "The issue description",
+    "discussion_locked": null,
+    "due_date": "2024-11-27",
+    "id": 2982,
+    "iid": 14,
+    "last_edited_at": null,
+    "last_edited_by_id": null,
+    "milestone_id": 61,
+    "moved_to_id": null,
+    "duplicated_to_id": null,
+    "project_id": 20064,
+    "relative_position": 7182,
+    "state_id": 1,
+    "time_estimate": 0,
+    "title": "The issue description",
+    "updated_at": "2024-11-22 21:57:31 UTC",
+    "updated_by_id": 2947,
+    "type": "Issue",
+    "url": "https://example.com/joe/proj-name/-/issues/14",
+    "total_time_spent": 0,
+    "time_change": 0,
+    "human_total_time_spent": null,
+    "human_time_change": null,
+    "human_time_estimate": null,
+    "assignee_ids": [
+      2947
+    ],
+    "assignee_id": 2947,
+    "labels": [
+      {
+        "id": 358,
+        "title": "joeProj-Name",
+        "color": "#6699cc",
+        "project_id": 20064,
+        "created_at": "2024-10-12 07:51:53 UTC",
+        "updated_at": "2024-10-12 07:51:53 UTC",
+        "template": false,
+        "description": null,
+        "type": "ProjectLabel",
+        "group_id": null
+      }
+    ],
+    "state": "opened",
+    "severity": "unknown",
+    "customer_relations_contacts": [],
+    "action": "update"
+  },
+  "labels": [
+    {
+      "id": 358,
+      "title": "joeProj-Name",
+      "color": "#6699cc",
+      "project_id": 20064,
+      "created_at": "2024-10-12 07:51:53 UTC",
+      "updated_at": "2024-10-12 07:51:53 UTC",
+      "template": false,
+      "description": null,
+      "type": "ProjectLabel",
+      "group_id": null
+    }
+  ],
+  "changes": {
+    "closed_at": {
+      "previous": "2024-11-22 21:57:30 UTC",
+      "current": null
+    },
+    "state_id": {
+      "previous": 2,
+      "current": 1
+    },
+    "updated_at": {
+      "previous": "2024-11-22 21:57:30 UTC",
+      "current": "2024-11-22 21:57:31 UTC"
+    }
+  },
+  "repository": {
+    "name": "proj-name",
+    "url": "git@example.com:joe/proj-name.git",
+    "description": "",
+    "homepage": "https://example.com/joe/proj-name"
+  },
+  "assignees": [
+    {
+      "id": 2947,
+      "name": "Joe",
+      "username": "joe",
+      "avatar_url": "https://secure.gravatar.com/avatar/abc",
+      "email": "[REDACTED]"
+    }
+  ]
+}
diff --git a/data/system-hooks/issue4.json b/data/system-hooks/issue4.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/issue4.json
@@ -0,0 +1,148 @@
+{
+  "object_kind": "issue",
+  "event_type": "issue",
+  "user": {
+    "id": 1853,
+    "name": "Joe",
+    "username": "kmsr2000",
+    "avatar_url": "https://secure.gravatar.com/avatar/abc",
+    "email": "[REDACTED]"
+  },
+  "project": {
+    "id": 19127,
+    "name": "proj-name",
+    "description": "",
+    "web_url": "https://example.com/joe/proj-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/proj-name.git",
+    "git_http_url": "https://example.com/joe/proj-name.git",
+    "namespace": "Joe",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/proj-name",
+    "default_branch": "master",
+    "ci_config_path": null,
+    "homepage": "https://example.com/joe/proj-name",
+    "url": "git@example.com:joe/proj-name.git",
+    "ssh_url": "git@example.com:joe/proj-name.git",
+    "http_url": "https://example.com/joe/proj-name.git"
+  },
+  "object_attributes": {
+    "author_id": 1853,
+    "closed_at": null,
+    "confidential": false,
+    "created_at": "2024-11-11 14:24:04 UTC",
+    "description": null,
+    "discussion_locked": null,
+    "due_date": null,
+    "id": 2451,
+    "iid": 78,
+    "last_edited_at": null,
+    "last_edited_by_id": null,
+    "milestone_id": 63,
+    "moved_to_id": null,
+    "duplicated_to_id": null,
+    "project_id": 19127,
+    "relative_position": 40014,
+    "state_id": 1,
+    "time_estimate": 0,
+    "title": "The issue description",
+    "updated_at": "2024-11-23 14:04:30 UTC",
+    "updated_by_id": 1853,
+    "type": "Task",
+    "url": "https://example.com/joe/proj-name/-/work_items/78",
+    "total_time_spent": 0,
+    "time_change": 0,
+    "human_total_time_spent": null,
+    "human_time_change": null,
+    "human_time_estimate": null,
+    "assignee_ids": [
+      1853
+    ],
+    "assignee_id": 1853,
+    "labels": [
+      {
+        "id": 391,
+        "title": "Stage 6",
+        "color": "#330066",
+        "project_id": 19127,
+        "created_at": "2024-11-11 13:54:59 UTC",
+        "updated_at": "2024-11-14 09:04:36 UTC",
+        "template": false,
+        "description": "",
+        "type": "ProjectLabel",
+        "group_id": null
+      },
+      {
+        "id": 337,
+        "title": "documentation",
+        "color": "#f0ad4e",
+        "project_id": 19127,
+        "created_at": "2024-10-07 07:46:00 UTC",
+        "updated_at": "2024-10-07 07:46:00 UTC",
+        "template": false,
+        "description": null,
+        "type": "ProjectLabel",
+        "group_id": null
+      }
+    ],
+    "state": "opened",
+    "severity": "unknown",
+    "customer_relations_contacts": [],
+    "action": "reopen"
+  },
+  "labels": [
+    {
+      "id": 391,
+      "title": "Stage 6",
+      "color": "#330066",
+      "project_id": 19127,
+      "created_at": "2024-11-11 13:54:59 UTC",
+      "updated_at": "2024-11-14 09:04:36 UTC",
+      "template": false,
+      "description": "",
+      "type": "ProjectLabel",
+      "group_id": null
+    },
+    {
+      "id": 337,
+      "title": "documentation",
+      "color": "#f0ad4e",
+      "project_id": 19127,
+      "created_at": "2024-10-07 07:46:00 UTC",
+      "updated_at": "2024-10-07 07:46:00 UTC",
+      "template": false,
+      "description": null,
+      "type": "ProjectLabel",
+      "group_id": null
+    }
+  ],
+  "changes": {
+    "closed_at": {
+      "previous": "2024-11-21 15:11:56 UTC",
+      "current": null
+    },
+    "state_id": {
+      "previous": 2,
+      "current": 1
+    },
+    "updated_at": {
+      "previous": "2024-11-21 15:11:56 UTC",
+      "current": "2024-11-23 14:04:30 UTC"
+    }
+  },
+  "repository": {
+    "name": "proj-name",
+    "url": "git@example.com:joe/proj-name.git",
+    "description": "",
+    "homepage": "https://example.com/joe/proj-name"
+  },
+  "assignees": [
+    {
+      "id": 1853,
+      "name": "Joe",
+      "username": "joe",
+      "avatar_url": "https://secure.gravatar.com/avatar/abc",
+      "email": "[REDACTED]"
+    }
+  ]
+}
diff --git a/data/system-hooks/note1.json b/data/system-hooks/note1.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/note1.json
@@ -0,0 +1,99 @@
+{
+  "object_kind": "note",
+  "event_type": "note",
+  "user": {
+    "id": 2950,
+    "name": "Joe",
+    "username": "joe",
+    "avatar_url": "https://secure.gravatar.com/avatar/abc",
+    "email": "[REDACTED]"
+  },
+  "project_id": 21219,
+  "project": {
+    "id": 21219,
+    "name": "proj-name",
+    "description": "",
+    "web_url": "https://example.com/joe/proj-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/proj-name.git",
+    "git_http_url": "https://example.com/joe/proj-name.git",
+    "namespace": "Joe",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/proj-name",
+    "default_branch": "master",
+    "ci_config_path": null,
+    "homepage": "https://example.com/joe/proj-name",
+    "url": "git@example.com:joe/proj-name.git",
+    "ssh_url": "git@example.com:joe/proj-name.git",
+    "http_url": "https://example.com/joe/proj-name.git"
+  },
+  "object_attributes": {
+    "attachment": null,
+    "author_id": 2950,
+    "change_position": null,
+    "commit_id": null,
+    "created_at": "2024-11-16 16:16:10 UTC",
+    "discussion_id": "4f0df21318e0110d71de2114a6c34385bd81b713",
+    "id": 16684,
+    "line_code": null,
+    "note": "the note text",
+    "noteable_id": 2797,
+    "noteable_type": "Issue",
+    "original_position": null,
+    "position": null,
+    "project_id": 21219,
+    "resolved_at": null,
+    "resolved_by_id": null,
+    "resolved_by_push": null,
+    "st_diff": null,
+    "system": false,
+    "type": null,
+    "updated_at": "2024-11-16 16:16:10 UTC",
+    "updated_by_id": null,
+    "description": "the note text",
+    "url": "https://example.com/joe/proj-name/-/issues/19#note_16684",
+    "action": "create"
+  },
+  "repository": {
+    "name": "proj-name",
+    "url": "git@example.com:joe/proj-name.git",
+    "description": "",
+    "homepage": "https://example.com/joe/proj-name"
+  },
+  "issue": {
+    "author_id": 2950,
+    "closed_at": null,
+    "confidential": false,
+    "created_at": "2024-11-16 12:47:16 UTC",
+    "description": "",
+    "discussion_locked": null,
+    "due_date": null,
+    "id": 2797,
+    "iid": 19,
+    "last_edited_at": null,
+    "last_edited_by_id": null,
+    "milestone_id": null,
+    "moved_to_id": null,
+    "duplicated_to_id": null,
+    "project_id": 21219,
+    "relative_position": 9747,
+    "state_id": 1,
+    "time_estimate": 0,
+    "title": "the issue title",
+    "updated_at": "2024-11-16 16:16:10 UTC",
+    "updated_by_id": 2950,
+    "type": "Issue",
+    "url": "https://example.com/joe/proj-name/-/issues/19",
+    "total_time_spent": 0,
+    "time_change": 0,
+    "human_total_time_spent": null,
+    "human_time_change": null,
+    "human_time_estimate": null,
+    "assignee_ids": [],
+    "assignee_id": null,
+    "labels": [],
+    "state": "opened",
+    "severity": "unknown",
+    "customer_relations_contacts": []
+  }
+}
diff --git a/data/system-hooks/note2.json b/data/system-hooks/note2.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/note2.json
@@ -0,0 +1,75 @@
+{
+  "object_kind": "note",
+  "event_type": "note",
+  "user": {
+    "id": 2477,
+    "name": "Joe",
+    "username": "joe",
+    "avatar_url": "https://example.com/uploads/-/system/user/avatar/2477/avatar.png",
+    "email": "[REDACTED]"
+  },
+  "project_id": 19102,
+  "project": {
+    "id": 19102,
+    "name": "proj-name",
+    "description": "",
+    "web_url": "https://example.com/joe/proj-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/proj-name.git",
+    "git_http_url": "https://example.com/joe/proj-name.git",
+    "namespace": "Joe",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/proj-name",
+    "default_branch": "master",
+    "ci_config_path": null,
+    "homepage": "https://example.com/joe/proj-name",
+    "url": "git@example.com:joe/proj-name.git",
+    "ssh_url": "git@example.com:joe/proj-name.git",
+    "http_url": "https://example.com/joe/proj-name.git"
+  },
+  "object_attributes": {
+    "attachment": null,
+    "author_id": 2477,
+    "change_position": null,
+    "commit_id": "8dd4c91c0efac607bf6d164ea7e5fd92e6fbe7c6",
+    "created_at": "2024-11-20 05:48:59 UTC",
+    "discussion_id": "163e23673e00ebb477a030944824cf25109bdf3e",
+    "id": 17030,
+    "line_code": null,
+    "note": "The note.",
+    "noteable_id": null,
+    "noteable_type": "Commit",
+    "original_position": null,
+    "position": null,
+    "project_id": 19102,
+    "resolved_at": null,
+    "resolved_by_id": null,
+    "resolved_by_push": null,
+    "st_diff": null,
+    "system": false,
+    "type": null,
+    "updated_at": "2024-11-20 05:48:59 UTC",
+    "updated_by_id": null,
+    "description": "The note.",
+    "url": "https://example.com/joe/proj-name/-/commit/abcde#note_17030",
+    "action": "create"
+  },
+  "repository": {
+    "name": "proj-name",
+    "url": "git@example.com:joe/proj-name.git",
+    "description": "",
+    "homepage": "https://example.com/joe/proj-name"
+  },
+  "commit": {
+    "id": "abcde",
+    "message": "commit message",
+    "title": "commit title",
+    "timestamp": "2024-11-16T20:32:21+04:00",
+    "url": "https://example.com/joe/proj-name/-/commit/abcde",
+    "author": {
+      "name": "Joe",
+      "email": "joe@gmail.com"
+    }
+  }
+}
+
diff --git a/data/system-hooks/note3.json b/data/system-hooks/note3.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/note3.json
@@ -0,0 +1,126 @@
+{
+  "object_kind": "note",
+  "event_type": "note",
+  "user": {
+    "id": 1853,
+    "name": "Joe",
+    "username": "joe",
+    "avatar_url": "https://secure.gravatar.com/avatar/abc",
+    "email": "[REDACTED]"
+  },
+  "project_id": 19127,
+  "project": {
+    "id": 19127,
+    "name": "f21sf-24-the-proj-name,",
+    "description": "",
+    "web_url": "https://example.com/joe/the-proj-name,",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/the-proj-name,.git",
+    "git_http_url": "https://example.com/joe/the-proj-name,.git",
+    "namespace": "Joe",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/the-proj-name,",
+    "default_branch": "master",
+    "ci_config_path": null,
+    "homepage": "https://example.com/joe/the-proj-name,",
+    "url": "git@example.com:joe/the-proj-name,.git",
+    "ssh_url": "git@example.com:joe/the-proj-name,.git",
+    "http_url": "https://example.com/joe/the-proj-name,.git"
+  },
+  "object_attributes": {
+    "attachment": null,
+    "author_id": 1853,
+    "change_position": null,
+    "commit_id": null,
+    "created_at": "2024-11-23 15:44:37 UTC",
+    "discussion_id": "db1ba73e93464583ae259a6ea79f95a7e38c7e3c",
+    "id": 17524,
+    "line_code": null,
+    "note": "The description",
+    "noteable_id": 2449,
+    "noteable_type": "Issue",
+    "original_position": null,
+    "position": null,
+    "project_id": 19127,
+    "resolved_at": null,
+    "resolved_by_id": null,
+    "resolved_by_push": null,
+    "st_diff": null,
+    "system": false,
+    "type": null,
+    "updated_at": "2024-11-23 15:44:37 UTC",
+    "updated_by_id": null,
+    "description": "The description",
+    "url": "https://example.com/joe/the-proj-name,/-/work_items/76#note_17524",
+    "action": "create"
+  },
+  "repository": {
+    "name": "the repo name",
+    "url": "git@example.com:joe/the-proj-name,.git",
+    "description": "",
+    "homepage": "https://example.com/joe/the-proj-name,"
+  },
+  "issue": {
+    "author_id": 1853,
+    "closed_at": null,
+    "confidential": false,
+    "created_at": "2024-11-11 14:23:52 UTC",
+    "description": null,
+    "discussion_locked": null,
+    "due_date": null,
+    "id": 2449,
+    "iid": 76,
+    "last_edited_at": null,
+    "last_edited_by_id": null,
+    "milestone_id": 63,
+    "moved_to_id": null,
+    "duplicated_to_id": null,
+    "project_id": 19127,
+    "relative_position": 38988,
+    "state_id": 1,
+    "time_estimate": 0,
+    "title": "issue title",
+    "updated_at": "2024-11-23 15:44:37 UTC",
+    "updated_by_id": 1853,
+    "type": "Task",
+    "url": "https://example.com/joe/the-proj-name,/-/work_items/76",
+    "total_time_spent": 0,
+    "time_change": 0,
+    "human_total_time_spent": null,
+    "human_time_change": null,
+    "human_time_estimate": null,
+    "assignee_ids": [
+      1853
+    ],
+    "assignee_id": 1853,
+    "labels": [
+      {
+        "id": 391,
+        "title": "Stage 6",
+        "color": "#330066",
+        "project_id": 19127,
+        "created_at": "2024-11-11 13:54:59 UTC",
+        "updated_at": "2024-11-14 09:04:36 UTC",
+        "template": false,
+        "description": "",
+        "type": "ProjectLabel",
+        "group_id": null
+      },
+      {
+        "id": 337,
+        "title": "documentation",
+        "color": "#f0ad4e",
+        "project_id": 19127,
+        "created_at": "2024-10-07 07:46:00 UTC",
+        "updated_at": "2024-10-07 07:46:00 UTC",
+        "template": false,
+        "description": null,
+        "type": "ProjectLabel",
+        "group_id": null
+      }
+    ],
+    "state": "opened",
+    "severity": "unknown",
+    "customer_relations_contacts": []
+  }
+}
diff --git a/data/system-hooks/pipeline.json b/data/system-hooks/pipeline.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/pipeline.json
@@ -0,0 +1,94 @@
+{
+  "object_kind": "pipeline",
+  "object_attributes": {
+    "id": 32617,
+    "iid": 4,
+    "name": null,
+    "ref": "master",
+    "tag": false,
+    "sha": "abcde",
+    "before_sha": "edcba",
+    "source": "push",
+    "status": "failed",
+    "detailed_status": "failed",
+    "stages": [
+      "test"
+    ],
+    "created_at": "2024-11-01 21:58:31 UTC",
+    "finished_at": "2024-11-01 21:58:35 UTC",
+    "duration": 3,
+    "queued_duration": null,
+    "variables": [],
+    "url": "https://example.com/joe/proj-name/-/pipelines/32617"
+  },
+  "merge_request": null,
+  "user": {
+    "id": 899,
+    "name": "Joe",
+    "username": "joe",
+    "avatar_url": "https://secure.gravatar.com/avatar/abc",
+    "email": "[REDACTED]"
+  },
+  "project": {
+    "id": 24472,
+    "name": "proj-name",
+    "description": null,
+    "web_url": "https://example.com/joe/proj-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/proj-name.git",
+    "git_http_url": "https://example.com/joe/proj-name.git",
+    "namespace": "Joe",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/proj-name",
+    "default_branch": "master",
+    "ci_config_path": null
+  },
+  "commit": {
+    "id": "abcde",
+    "message": "the commit message",
+    "title": "the commit message",
+    "timestamp": "2024-11-01T21:58:31+00:00",
+    "url": "https://example.com/joe/proj-name/-/commit/abcde",
+    "author": {
+      "name": "Joe",
+      "email": "12345+Joe@users.noreply.github.com"
+    }
+  },
+  "builds": [
+    {
+      "id": 47429,
+      "stage": "test",
+      "name": "junit",
+      "status": "failed",
+      "created_at": "2024-11-01 21:58:31 UTC",
+      "started_at": "2024-11-01 21:58:31 UTC",
+      "finished_at": "2024-11-01 21:58:35 UTC",
+      "duration": 3.889573,
+      "queued_duration": 0.19131,
+      "failure_reason": "script_failure",
+      "when": "on_success",
+      "manual": false,
+      "allow_failure": false,
+      "user": {
+        "id": 899,
+        "name": "Joe",
+        "username": "joe",
+        "avatar_url": "https://secure.gravatar.com/avatar/abc",
+        "email": "[REDACTED]"
+      },
+      "runner": {
+        "id": 15,
+        "description": "",
+        "runner_type": "instance_type",
+        "active": true,
+        "is_shared": true,
+        "tags": []
+      },
+      "artifacts_file": {
+        "filename": null,
+        "size": null
+      },
+      "environment": null
+    }
+  ]
+}
diff --git a/data/system-hooks/pipeline2.json b/data/system-hooks/pipeline2.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/pipeline2.json
@@ -0,0 +1,94 @@
+{
+  "object_kind": "pipeline",
+  "object_attributes": {
+    "id": 32686,
+    "iid": 2,
+    "name": null,
+    "ref": "master",
+    "tag": false,
+    "sha": "abcde",
+    "before_sha": "edcba",
+    "source": "push",
+    "status": "failed",
+    "detailed_status": "failed",
+    "stages": [
+      "test"
+    ],
+    "created_at": "2024-11-02 18:32:17 UTC",
+    "finished_at": "2024-11-02 18:32:23 UTC",
+    "duration": 4,
+    "queued_duration": 1,
+    "variables": [],
+    "url": "https://example.com/joe/proj-name/-/pipelines/32686"
+  },
+  "merge_request": null,
+  "user": {
+    "id": 742,
+    "name": "Joe",
+    "username": "joe",
+    "avatar_url": "https://secure.gravatar.com/avatar/abc",
+    "email": "[REDACTED]"
+  },
+  "project": {
+    "id": 25078,
+    "name": "proj-name",
+    "description": null,
+    "web_url": "https://example.com/joe/proj-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/proj-name.git",
+    "git_http_url": "https://example.com/joe/proj-name.git",
+    "namespace": "Joe",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/proj-name",
+    "default_branch": "master",
+    "ci_config_path": null
+  },
+  "commit": {
+    "id": "abcde",
+    "message": "the commit message",
+    "title": "the commit message",
+    "timestamp": "2024-11-02T18:32:16+00:00",
+    "url": "https://example.com/joe/proj-name/-/commit/abcde",
+    "author": {
+      "name": "joe",
+      "email": "joe@gmail.com"
+    }
+  },
+  "builds": [
+    {
+      "id": 47501,
+      "stage": "test",
+      "name": "junit",
+      "status": "failed",
+      "created_at": "2024-11-02 18:32:18 UTC",
+      "started_at": "2024-11-02 18:32:18 UTC",
+      "finished_at": "2024-11-02 18:32:23 UTC",
+      "duration": 4.428372,
+      "queued_duration": 0.561693,
+      "failure_reason": "script_failure",
+      "when": "on_success",
+      "manual": false,
+      "allow_failure": false,
+      "user": {
+        "id": 742,
+        "name": "Joe",
+        "username": "joe",
+        "avatar_url": "https://secure.gravatar.com/avatar/abc",
+        "email": "[REDACTED]"
+      },
+      "runner": {
+        "id": 15,
+        "description": "",
+        "runner_type": "instance_type",
+        "active": true,
+        "is_shared": true,
+        "tags": []
+      },
+      "artifacts_file": {
+        "filename": null,
+        "size": null
+      },
+      "environment": null
+    }
+  ]
+}
diff --git a/data/system-hooks/pipeline3.json b/data/system-hooks/pipeline3.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/pipeline3.json
@@ -0,0 +1,94 @@
+{
+  "object_kind": "pipeline",
+  "object_attributes": {
+    "id": 32701,
+    "iid": 5,
+    "name": null,
+    "ref": "master",
+    "tag": false,
+    "sha": "abcde",
+    "before_sha": "edcba",
+    "source": "push",
+    "status": "failed",
+    "detailed_status": "failed",
+    "stages": [
+      "test"
+    ],
+    "created_at": "2024-11-02 19:31:48 UTC",
+    "finished_at": "2024-11-02 19:31:53 UTC",
+    "duration": 3,
+    "queued_duration": 1,
+    "variables": [],
+    "url": "https://example.com/joe/proj-name/-/pipelines/32701"
+  },
+  "merge_request": null,
+  "user": {
+    "id": 3041,
+    "name": "Joe",
+    "username": "joe",
+    "avatar_url": "https://secure.gravatar.com/avatar/abc",
+    "email": "[REDACTED]"
+  },
+  "project": {
+    "id": 25084,
+    "name": "proj-name",
+    "description": "",
+    "web_url": "https://example.com/joe/proj-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/proj-name.git",
+    "git_http_url": "https://example.com/joe/proj-name.git",
+    "namespace": "Joe",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/proj-name",
+    "default_branch": "master",
+    "ci_config_path": null
+  },
+  "commit": {
+    "id": "abcde",
+    "message": "the commit message",
+    "title": "the commit message",
+    "timestamp": "2024-11-02T19:31:48+00:00",
+    "url": "https://example.com/joe/proj-name/-/commit/abcde",
+    "author": {
+      "name": "Joe",
+      "email": "joe@gmail.com"
+    }
+  },
+  "builds": [
+    {
+      "id": 47516,
+      "stage": "test",
+      "name": "junit",
+      "status": "failed",
+      "created_at": "2024-11-02 19:31:48 UTC",
+      "started_at": "2024-11-02 19:31:50 UTC",
+      "finished_at": "2024-11-02 19:31:53 UTC",
+      "duration": 3.734497,
+      "queued_duration": 0.672819,
+      "failure_reason": "script_failure",
+      "when": "on_success",
+      "manual": false,
+      "allow_failure": false,
+      "user": {
+        "id": 3041,
+        "name": "Joe",
+        "username": "joe",
+        "avatar_url": "https://secure.gravatar.com/avatar/abc",
+        "email": "[REDACTED]"
+      },
+      "runner": {
+        "id": 14,
+        "description": "",
+        "runner_type": "instance_type",
+        "active": true,
+        "is_shared": true,
+        "tags": []
+      },
+      "artifacts_file": {
+        "filename": null,
+        "size": null
+      },
+      "environment": null
+    }
+  ]
+}
diff --git a/data/system-hooks/pipeline4.json b/data/system-hooks/pipeline4.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/pipeline4.json
@@ -0,0 +1,87 @@
+{
+  "object_kind": "pipeline",
+  "object_attributes": {
+    "id": 36096,
+    "iid": 1,
+    "name": null,
+    "ref": "master",
+    "tag": false,
+    "sha": "abcde",
+    "before_sha": "edcba",
+    "source": "push",
+    "status": "pending",
+    "detailed_status": "pending",
+    "stages": [
+      "test"
+    ],
+    "created_at": "2024-11-08 21:26:15 UTC",
+    "finished_at": null,
+    "duration": null,
+    "queued_duration": null,
+    "variables": [],
+    "url": "https://example.com/joe/proj-name/-/pipelines/36096"
+  },
+  "merge_request": null,
+  "user": {
+    "id": 2659,
+    "name": "Lad, Krishan",
+    "username": "joe",
+    "avatar_url": "https://example.com/uploads/-/system/user/avatar/2659/avatar.png",
+    "email": "[REDACTED]"
+  },
+  "project": {
+    "id": 25415,
+    "name": "F28SG - Lab 7",
+    "description": null,
+    "web_url": "https://example.com/joe/proj-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/proj-name.git",
+    "git_http_url": "https://example.com/joe/proj-name.git",
+    "namespace": "Joe",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/proj-name",
+    "default_branch": "master",
+    "ci_config_path": null
+  },
+  "commit": {
+    "id": "abcde",
+    "message": "commit message",
+    "title": "08 NOV 2024 @ 21:20",
+    "timestamp": "2024-11-08T21:26:13+00:00",
+    "url": "https://example.com/joe/proj-name/-/commit/abcde",
+    "author": {
+      "name": "Joe",
+      "email": "joe@gmail.com"
+    }
+  },
+  "builds": [
+    {
+      "id": 51146,
+      "stage": "test",
+      "name": "junit",
+      "status": "pending",
+      "created_at": "2024-11-08 21:26:15 UTC",
+      "started_at": null,
+      "finished_at": null,
+      "duration": null,
+      "queued_duration": 0.328087189,
+      "failure_reason": null,
+      "when": "on_success",
+      "manual": false,
+      "allow_failure": false,
+      "user": {
+        "id": 2659,
+        "name": "Joe",
+        "username": "joe",
+        "avatar_url": "https://example.com/uploads/-/system/user/avatar/2659/avatar.png",
+        "email": "[REDACTED]"
+      },
+      "runner": null,
+      "artifacts_file": {
+        "filename": null,
+        "size": null
+      },
+      "environment": null
+    }
+  ]
+}
diff --git a/data/system-hooks/pipeline5.json b/data/system-hooks/pipeline5.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/pipeline5.json
@@ -0,0 +1,94 @@
+{
+  "object_kind": "pipeline",
+  "object_attributes": {
+    "id": 38727,
+    "iid": 53,
+    "name": null,
+    "ref": "master",
+    "tag": false,
+    "sha": "abcde",
+    "before_sha": "edcba",
+    "source": "push",
+    "status": "success",
+    "detailed_status": "passed",
+    "stages": [
+      "deploy"
+    ],
+    "created_at": "2024-11-17 16:17:11 UTC",
+    "finished_at": "2024-11-17 16:17:15 UTC",
+    "duration": 2,
+    "queued_duration": 1,
+    "variables": [],
+    "url": "https://example.com/group-name/proj-name/-/pipelines/38727"
+  },
+  "merge_request": null,
+  "user": {
+    "id": 2638,
+    "name": "Joe Bloggs",
+    "username": "joe",
+    "avatar_url": "https://secure.gravatar.com/avatar/abc",
+    "email": "[REDACTED]"
+  },
+  "project": {
+    "id": 20385,
+    "name": "Cinema Website",
+    "description": null,
+    "web_url": "https://example.com/group-name/proj-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:group-name/proj-name.git",
+    "git_http_url": "https://example.com/group-name/proj-name.git",
+    "namespace": "Group name",
+    "visibility_level": 0,
+    "path_with_namespace": "group-name/proj-name",
+    "default_branch": "master",
+    "ci_config_path": null
+  },
+  "commit": {
+    "id": "abcde",
+    "message": "the message",
+    "title": "the commit title",
+    "timestamp": "2024-11-17T16:17:13+00:00",
+    "url": "https://example.com/group-name/proj-name/-/commit/abcde",
+    "author": {
+      "name": "Joe",
+      "email": "joe@gmail.com"
+    }
+  },
+  "builds": [
+    {
+      "id": 54510,
+      "stage": "deploy",
+      "name": "pages",
+      "status": "success",
+      "created_at": "2024-11-17 16:17:11 UTC",
+      "started_at": "2024-11-17 16:17:12 UTC",
+      "finished_at": "2024-11-17 16:17:15 UTC",
+      "duration": 2.767007,
+      "queued_duration": 0.868802,
+      "failure_reason": null,
+      "when": "on_success",
+      "manual": false,
+      "allow_failure": false,
+      "user": {
+        "id": 2638,
+        "name": "Joe Bloggs",
+        "username": "joe",
+        "avatar_url": "https://secure.gravatar.com/avatar/abc",
+        "email": "[REDACTED]"
+      },
+      "runner": {
+        "id": 15,
+        "description": "",
+        "runner_type": "instance_type",
+        "active": true,
+        "is_shared": true,
+        "tags": []
+      },
+      "artifacts_file": {
+        "filename": "artifacts.zip",
+        "size": 8136559
+      },
+      "environment": null
+    }
+  ]
+}
diff --git a/data/system-hooks/push2.json b/data/system-hooks/push2.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/push2.json
@@ -0,0 +1,46 @@
+{
+  "object_kind": "push",
+  "event_name": "push",
+  "before": "edcba",
+  "after": "0000000000000000000000000000000000000000",
+  "ref": "refs/heads/Rohan",
+  "ref_protected": false,
+  "checkout_sha": null,
+  "message": null,
+  "user_id": 2583,
+  "user_name": "Joe",
+  "user_username": "joe",
+  "user_email": null,
+  "user_avatar": "https://secure.gravatar.com/avatar/abc",
+  "project_id": 25811,
+  "project": {
+    "id": 25811,
+    "name": "The project name",
+    "description": null,
+    "web_url": "https://example.com/joe/proj-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/proj-name.git",
+    "git_http_url": "https://example.com/joe/proj-name.git",
+    "namespace": "The namespace",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/proj-name",
+    "default_branch": "main",
+    "ci_config_path": "",
+    "homepage": "https://example.com/joe/proj-name",
+    "url": "git@example.com:joe/proj-name.git",
+    "ssh_url": "git@example.com:joe/proj-name.git",
+    "http_url": "https://example.com/joe/proj-name.git"
+  },
+  "commits": [],
+  "total_commits_count": 0,
+  "push_options": {},
+  "repository": {
+    "name": "The project name",
+    "url": "git@example.com:joe/proj-name.git",
+    "description": null,
+    "homepage": "https://example.com/joe/proj-name",
+    "git_http_url": "https://example.com/joe/proj-name.git",
+    "git_ssh_url": "git@example.com:joe/proj-name.git",
+    "visibility_level": 0
+  }
+}
diff --git a/data/system-hooks/wiki-page1.json b/data/system-hooks/wiki-page1.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/wiki-page1.json
@@ -0,0 +1,45 @@
+{
+  "object_kind": "wiki_page",
+  "user": {
+    "id": 2908,
+    "name": "Joe",
+    "username": "joe",
+    "avatar_url": "https://secure.gravatar.com/avatar/abc",
+    "email": "[REDACTED]"
+  },
+  "project": {
+    "id": 25827,
+    "name": "the name",
+    "description": "",
+    "web_url": "https://example.com/joe/proj-name",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/proj-name.git",
+    "git_http_url": "https://example.com/joe/proj-name.git",
+    "namespace": "Joe",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/proj-name",
+    "default_branch": "main",
+    "ci_config_path": "",
+    "homepage": "https://example.com/joe/proj-name",
+    "url": "git@example.com:joe/proj-name.git",
+    "ssh_url": "git@example.com:joe/proj-name.git",
+    "http_url": "https://example.com/joe/proj-name.git"
+  },
+  "wiki": {
+    "web_url": "https://example.com/joe/proj-name/-/wikis/home",
+    "git_ssh_url": "git@example.com:joe/proj-name.wiki.git",
+    "git_http_url": "https://example.com/joe/proj-name.wiki.git",
+    "path_with_namespace": "joe/proj-name.wiki",
+    "default_branch": "main"
+  },
+  "object_attributes": {
+    "slug": "home",
+    "title": "home",
+    "format": "markdown",
+    "message": "The wiki message",
+    "version_id": "99c9ea1617756edfb6187ab82e663afb834cd306",
+    "url": "https://example.com/joe/proj-name/-/wikis/home",
+    "action": "update",
+    "diff_url": "https://example.com/joe/proj-name/-/wikis/home/diff?version_id=99c9ea1617756edfb6187ab82e663afb834cd306"
+  }
+}
diff --git a/data/system-hooks/work-item1.json b/data/system-hooks/work-item1.json
new file mode 100644
--- /dev/null
+++ b/data/system-hooks/work-item1.json
@@ -0,0 +1,148 @@
+{
+  "object_kind": "work_item",
+  "event_type": "work_item",
+  "user": {
+    "id": 1853,
+    "name": "Joe Bloggs",
+    "username": "joe",
+    "avatar_url": "https://secure.gravatar.com/avatar/abc",
+    "email": "[REDACTED]"
+  },
+  "project": {
+    "id": 19127,
+    "name": "proj-name",
+    "description": "",
+    "web_url": "http://example.com/joe/project",
+    "avatar_url": null,
+    "git_ssh_url": "git@example.com:joe/project.git",
+    "git_http_url": "http://example.com/joe/project.git",
+    "namespace": "Joe Bloggs",
+    "visibility_level": 0,
+    "path_with_namespace": "joe/project",
+    "default_branch": "master",
+    "ci_config_path": null,
+    "homepage": "http://example.com/joe/project",
+    "url": "git@example.com:joe/project.git",
+    "ssh_url": "git@example.com:joe/project.git",
+    "http_url": "http://example.com/joe/project.git"
+  },
+  "object_attributes": {
+    "author_id": 1853,
+    "closed_at": "2024-11-23 15:56:50 UTC",
+    "confidential": false,
+    "created_at": "2024-11-11 14:23:52 UTC",
+    "description": null,
+    "discussion_locked": null,
+    "due_date": null,
+    "id": 2449,
+    "iid": 76,
+    "last_edited_at": null,
+    "last_edited_by_id": null,
+    "milestone_id": 63,
+    "moved_to_id": null,
+    "duplicated_to_id": null,
+    "project_id": 19127,
+    "relative_position": 38988,
+    "state_id": 2,
+    "time_estimate": 0,
+    "title": "The title",
+    "updated_at": "2024-11-23 15:56:50 UTC",
+    "updated_by_id": 1853,
+    "type": "Task",
+    "url": "http://example.com/joe/project/-/work_items/76",
+    "total_time_spent": 0,
+    "time_change": 0,
+    "human_total_time_spent": null,
+    "human_time_change": null,
+    "human_time_estimate": null,
+    "assignee_ids": [
+      1853
+    ],
+    "assignee_id": 1853,
+    "labels": [
+      {
+        "id": 391,
+        "title": "Stage 6",
+        "color": "#330066",
+        "project_id": 19127,
+        "created_at": "2024-11-11 13:54:59 UTC",
+        "updated_at": "2024-11-14 09:04:36 UTC",
+        "template": false,
+        "description": "",
+        "type": "ProjectLabel",
+        "group_id": null
+      },
+      {
+        "id": 337,
+        "title": "documentation",
+        "color": "#f0ad4e",
+        "project_id": 19127,
+        "created_at": "2024-10-07 07:46:00 UTC",
+        "updated_at": "2024-10-07 07:46:00 UTC",
+        "template": false,
+        "description": null,
+        "type": "ProjectLabel",
+        "group_id": null
+      }
+    ],
+    "state": "closed",
+    "severity": "unknown",
+    "customer_relations_contacts": [],
+    "action": "close"
+  },
+  "labels": [
+    {
+      "id": 391,
+      "title": "Stage 6",
+      "color": "#330066",
+      "project_id": 19127,
+      "created_at": "2024-11-11 13:54:59 UTC",
+      "updated_at": "2024-11-14 09:04:36 UTC",
+      "template": false,
+      "description": "",
+      "type": "ProjectLabel",
+      "group_id": null
+    },
+    {
+      "id": 337,
+      "title": "documentation",
+      "color": "#f0ad4e",
+      "project_id": 19127,
+      "created_at": "2024-10-07 07:46:00 UTC",
+      "updated_at": "2024-10-07 07:46:00 UTC",
+      "template": false,
+      "description": null,
+      "type": "ProjectLabel",
+      "group_id": null
+    }
+  ],
+  "changes": {
+    "closed_at": {
+      "previous": null,
+      "current": "2024-11-23 15:56:50 UTC"
+    },
+    "state_id": {
+      "previous": 1,
+      "current": 2
+    },
+    "updated_at": {
+      "previous": "2024-11-23 15:44:37 UTC",
+      "current": "2024-11-23 15:56:50 UTC"
+    }
+  },
+  "repository": {
+    "name": "proj-name",
+    "url": "git@example.com:joe/project.git",
+    "description": "",
+    "homepage": "http://example.com/joe/project"
+  },
+  "assignees": [
+    {
+      "id": 1853,
+      "name": "Joe Bloggs",
+      "username": "joe",
+      "avatar_url": "https://secure.gravatar.com/avatar/abc",
+      "email": "[REDACTED]"
+    }
+  ]
+}
diff --git a/gitlab-haskell.cabal b/gitlab-haskell.cabal
--- a/gitlab-haskell.cabal
+++ b/gitlab-haskell.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.4
 name:           gitlab-haskell
 category:       Git
-version:        1.0.2.2
+version:        1.1.0.0
 synopsis:       A Haskell library for the GitLab web API
 description:
             This library lifts the GitLab REST API into Haskell: <https://docs.gitlab.com/ee/api/>
@@ -11,7 +11,7 @@
 bug-reports:    https://gitlab.com/robstewart57/gitlab-haskell/issues
 author:         Rob Stewart
 maintainer:     robstewart57@gmail.com
-copyright:      2024 Rob Stewart, Heriot-Watt University
+copyright:      2025 Rob Stewart, Heriot-Watt University
 license:        BSD-3-Clause
 license-file:   LICENSE
 data-files:     data/system-hooks/*.json
@@ -209,7 +209,7 @@
               , temporary
               , unix-compat
               , mtl
-              , data-default-class
+              , data-default
   default-language: Haskell2010
   ghc-options: -Wall
                -- the following two for the stan static analysis tool
diff --git a/src/GitLab.hs b/src/GitLab.hs
--- a/src/GitLab.hs
+++ b/src/GitLab.hs
@@ -39,7 +39,7 @@
 
 import Control.Monad.IO.Class
 import Control.Monad.Trans.Reader
-import Data.Default.Class
+import Data.Default
 import qualified Data.Text as T
 import GitLab.API.Boards
 import GitLab.API.Branches
diff --git a/src/GitLab/API/Members.hs b/src/GitLab/API/Members.hs
--- a/src/GitLab/API/Members.hs
+++ b/src/GitLab/API/Members.hs
@@ -57,10 +57,8 @@
 
 import qualified Data.ByteString.Lazy as BSL
 import Data.Either
-import Data.Text (Text)
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as T
-import GitLab.API.Groups
 import GitLab.API.Users
 import GitLab.Types
 import GitLab.WebRequests.GitLabWebCalls
@@ -362,8 +360,23 @@
   -- | user
   User ->
   GitLab (Either (Response BSL.ByteString) (Maybe ()))
-removeUserFromProject prj =
-  removeUserFromEntity (project_name prj) "projects"
+removeUserFromProject prj usr = do
+  result <- gitlabDelete addr []
+  case result of
+    Left err -> return (Left err)
+    -- GitLab version 14.2.3 returns Version JSON info when a
+    -- member is removed from a group/project. I'm not sure if
+    -- this is new behaviour, anyway we catch it here.
+    Right (Just (Version {})) -> return (Right (Just ()))
+    Right Nothing -> return (Right (Just ()))
+  where
+    addr =
+      "/"
+        <> "projects"
+        <> "/"
+        <> T.decodeUtf8 (urlEncode False (T.encodeUtf8 (T.pack (show (project_id prj)))))
+        <> "/members/"
+        <> T.decodeUtf8 (urlEncode False (T.encodeUtf8 (T.pack (show (user_id usr)))))
 
 -- | Removes a user from a group where the user has been explicitly
 -- assigned a role.
@@ -378,8 +391,23 @@
   -- | user
   User ->
   GitLab (Either (Response BSL.ByteString) (Maybe ()))
-removeUserFromGroup grp =
-  removeUserFromEntity (group_name grp) "groups"
+removeUserFromGroup grp usr = do
+  result <- gitlabDelete addr []
+  case result of
+    Left err -> return (Left err)
+    -- GitLab version 14.2.3 returns Version JSON info when a
+    -- member is removed from a group/project. I'm not sure if
+    -- this is new behaviour, anyway we catch it here.
+    Right (Just (Version {})) -> return (Right (Just ()))
+    Right Nothing -> return (Right (Just ()))
+  where
+    addr =
+      "/"
+        <> "groups"
+        <> "/"
+        <> T.decodeUtf8 (urlEncode False (T.encodeUtf8 (T.pack (show (group_id grp)))))
+        <> "/members/"
+        <> T.decodeUtf8 (urlEncode False (T.encodeUtf8 (T.pack (show (user_id usr)))))
 
 -- | Approves a pending user for a group and its subgroups and
 -- projects.
@@ -434,53 +462,3 @@
       "/groups/"
         <> T.pack (show (group_id grp))
         <> "/pending_members"
-
----------------------
--- Internal functions
----------------------
-
--- | removes a user from a group or project.
-removeUserFromEntity ::
-  -- | group name
-  Text ->
-  -- | entity ("groups" or "projects)
-  Text ->
-  -- | user
-  User ->
-  GitLab (Either (Response BSL.ByteString) (Maybe ()))
-removeUserFromEntity groupName entity usr =
-  removeUserFromEntity' groupName entity (user_id usr)
-
--- | removes a user with a given user ID from a group or project.
-removeUserFromEntity' ::
-  -- | group name
-  Text ->
-  -- | entity ("groups" or "projects")
-  Text ->
-  -- | user ID
-  Int ->
-  GitLab (Either (Response BSL.ByteString) (Maybe ()))
-removeUserFromEntity' groupName entity usrId = do
-  attempt <- groups (defaultListGroupsFilters {listGroupsFilter_search = Just groupName})
-  case attempt of
-    [] ->
-      return (Right Nothing)
-    [grp] -> do
-      result <- gitlabDelete addr []
-      case result of
-        Left err -> return (Left err)
-        -- GitLab version 14.2.3 returns Version JSON info when a
-        -- member is removed from a group/project. I'm not sure if
-        -- this is new behaviour, anyway we catch it here.
-        Right (Just (Version {})) -> return (Right (Just ()))
-        Right Nothing -> return (Right (Just ()))
-      where
-        addr =
-          "/"
-            <> entity
-            <> "/"
-            <> T.decodeUtf8 (urlEncode False (T.encodeUtf8 (T.pack (show (group_id grp)))))
-            <> "/members/"
-            <> T.decodeUtf8 (urlEncode False (T.encodeUtf8 (T.pack (show usrId))))
-    (_ : _) ->
-      return (Right Nothing)
diff --git a/src/GitLab/API/Pipelines.hs b/src/GitLab/API/Pipelines.hs
--- a/src/GitLab/API/Pipelines.hs
+++ b/src/GitLab/API/Pipelines.hs
@@ -32,7 +32,6 @@
 where
 
 import qualified Data.ByteString.Lazy as BSL
-import Data.Either
 import Data.Text (Text)
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as T
@@ -40,15 +39,20 @@
 import GitLab.WebRequests.GitLabWebCalls
 import Network.HTTP.Client
 
--- | List pipelines in a project. Child pipelines are not included in
--- the results, but you can get child pipeline individually.
+-- | List pipelines in a project. Child pipelines are not included in the
+-- results, but you can get child pipeline individually. Returns 'Nothing' if
+-- access to the pipelines are forbidden e.g. for a project without any files.
 pipelines ::
   -- | the project
   Project ->
-  GitLab [Pipeline]
+  GitLab (Maybe [Pipeline])
 pipelines p = do
   result <- pipelines' (project_id p)
-  return (fromRight (error "pipelines error") result)
+  case result of
+    Right ps -> return (Just ps)
+    Left _err -> return Nothing
+
+-- return (fromRight (error "pipelines error") result)
 
 -- | returns the pipelines for a project given its project ID.
 pipelines' ::
diff --git a/src/GitLab/API/Projects.hs b/src/GitLab/API/Projects.hs
--- a/src/GitLab/API/Projects.hs
+++ b/src/GitLab/API/Projects.hs
@@ -1100,8 +1100,9 @@
 projectCISuccess prj = do
   pipes <- pipelines prj
   case pipes of
-    [] -> return False
-    (x : _) -> return (pipeline_status x == "success")
+    Nothing -> return False
+    Just [] -> return False
+    Just (x : _) -> return (pipeline_status x == "success")
 
 -- -- | searches for a username, and returns a user ID for that user, or
 -- -- 'Nothing' if a user cannot be found.
diff --git a/src/GitLab/SystemHooks/GitLabSystemHooks.hs b/src/GitLab/SystemHooks/GitLabSystemHooks.hs
--- a/src/GitLab/SystemHooks/GitLabSystemHooks.hs
+++ b/src/GitLab/SystemHooks/GitLabSystemHooks.hs
@@ -41,10 +41,20 @@
 -- received from a function argument.
 receiveString :: Text -> [Rule] -> GitLab ()
 receiveString eventContent rules = do
+  -- maybe log the JSON received
   traceSystemHook eventContent
+  -- fire the rules
   didFire <- mapM (fire eventContent) rules
+  -- if nothing fired
   when (not (or didFire)) $ do
     cfg <- MR.asks serverCfg
+    -- maybe log the JSON if it was not parsed
+    when (debugSystemHooks cfg == Just NonParsedJSON) $ liftIO $ do
+      -- no rules fired, was it because the JSON was not parsed?
+      when (not (attemptGitLabEventParse eventContent)) $ do
+        fpath <- writeSystemTempFile "gitlab-system-hook-nonparsed-" (T.unpack eventContent)
+        void $ setFileMode fpath otherReadMode
+    -- maybe log the JSON if no rules were fired for it
     when (debugSystemHooks cfg == Just UnprocessedEvents) $ liftIO $ do
       fpath <- writeSystemTempFile "gitlab-system-hook-unprocessed-" (T.unpack eventContent)
       void $ setFileMode fpath otherReadMode
@@ -185,6 +195,30 @@
       (Just (\_ -> return True))
       (cast f :: Maybe (MergeRequestEvent -> GitLab ()))
       (parseEvent contents :: Maybe MergeRequestEvent)
+    `orElse` fireIf'
+      (Just (\_ -> return True))
+      (cast f :: Maybe (BuildEvent -> GitLab ()))
+      (parseEvent contents :: Maybe BuildEvent)
+    `orElse` fireIf'
+      (Just (\_ -> return True))
+      (cast f :: Maybe (PipelineEvent -> GitLab ()))
+      (parseEvent contents :: Maybe PipelineEvent)
+    `orElse` fireIf'
+      (Just (\_ -> return True))
+      (cast f :: Maybe (IssueEvent -> GitLab ()))
+      (parseEvent contents :: Maybe IssueEvent)
+    `orElse` fireIf'
+      (Just (\_ -> return True))
+      (cast f :: Maybe (NoteEvent -> GitLab ()))
+      (parseEvent contents :: Maybe NoteEvent)
+    `orElse` fireIf'
+      (Just (\_ -> return True))
+      (cast f :: Maybe (WikiPageEvent -> GitLab ()))
+      (parseEvent contents :: Maybe WikiPageEvent)
+    `orElse` fireIf'
+      (Just (\_ -> return True))
+      (cast f :: Maybe (WorkItemEvent -> GitLab ()))
+      (parseEvent contents :: Maybe WorkItemEvent)
 tryFire contents (MatchIf _ predF f) = do
   fireIf'
     (cast predF :: Maybe (ProjectCreate -> GitLab Bool))
@@ -286,6 +320,30 @@
       (cast predF :: Maybe (MergeRequestEvent -> GitLab Bool))
       (cast f :: Maybe (MergeRequestEvent -> GitLab ()))
       (parseEvent contents :: Maybe MergeRequestEvent)
+    `orElse` fireIf'
+      (cast predF :: Maybe (BuildEvent -> GitLab Bool))
+      (cast f :: Maybe (BuildEvent -> GitLab ()))
+      (parseEvent contents :: Maybe BuildEvent)
+    `orElse` fireIf'
+      (cast predF :: Maybe (PipelineEvent -> GitLab Bool))
+      (cast f :: Maybe (PipelineEvent -> GitLab ()))
+      (parseEvent contents :: Maybe PipelineEvent)
+    `orElse` fireIf'
+      (cast predF :: Maybe (IssueEvent -> GitLab Bool))
+      (cast f :: Maybe (IssueEvent -> GitLab ()))
+      (parseEvent contents :: Maybe IssueEvent)
+    `orElse` fireIf'
+      (cast predF :: Maybe (NoteEvent -> GitLab Bool))
+      (cast f :: Maybe (NoteEvent -> GitLab ()))
+      (parseEvent contents :: Maybe NoteEvent)
+    `orElse` fireIf'
+      (cast predF :: Maybe (WikiPageEvent -> GitLab Bool))
+      (cast f :: Maybe (WikiPageEvent -> GitLab ()))
+      (parseEvent contents :: Maybe WikiPageEvent)
+    `orElse` fireIf'
+      (cast predF :: Maybe (WorkItemEvent -> GitLab Bool))
+      (cast f :: Maybe (WorkItemEvent -> GitLab ()))
+      (parseEvent contents :: Maybe WorkItemEvent)
 
 fireIf' :: (Typeable a, Show a) => Maybe (a -> GitLab Bool) -> Maybe (a -> GitLab ()) -> Maybe a -> GitLab Bool
 fireIf' castPred castF parsed = do
@@ -304,3 +362,98 @@
                   f' parsed'
                   return True
                 else return False
+
+-- | returns 'True' if at least on parsing attemps of the JSON is successful
+attemptGitLabEventParse :: T.Text -> Bool
+attemptGitLabEventParse contents =
+  -- note: this needs refactoring to be less verbose
+  case parseEvent contents :: Maybe ProjectCreate of
+    Just _ -> True
+    Nothing ->
+      case parseEvent contents :: Maybe ProjectDestroy of
+        Just _ -> True
+        Nothing ->
+          case parseEvent contents :: Maybe ProjectRename of
+            Just _ -> True
+            Nothing ->
+              case parseEvent contents :: Maybe ProjectTransfer of
+                Just _ -> True
+                Nothing ->
+                  case parseEvent contents :: Maybe ProjectUpdate of
+                    Just _ -> True
+                    Nothing ->
+                      case parseEvent contents :: Maybe GroupMemberUpdate of
+                        Just _ -> True
+                        Nothing ->
+                          case parseEvent contents :: Maybe UserAddToTeam of
+                            Just _ -> True
+                            Nothing ->
+                              case parseEvent contents :: Maybe UserUpdateForTeam of
+                                Just _ -> True
+                                Nothing ->
+                                  case parseEvent contents :: Maybe UserRemoveFromTeam of
+                                    Just _ -> True
+                                    Nothing ->
+                                      case parseEvent contents :: Maybe UserCreate of
+                                        Just _ -> True
+                                        Nothing ->
+                                          case parseEvent contents :: Maybe UserRemove of
+                                            Just _ -> True
+                                            Nothing ->
+                                              case parseEvent contents :: Maybe UserFailedLogin of
+                                                Just _ -> True
+                                                Nothing ->
+                                                  case parseEvent contents :: Maybe UserRename of
+                                                    Just _ -> True
+                                                    Nothing ->
+                                                      case parseEvent contents :: Maybe KeyCreate of
+                                                        Just _ -> True
+                                                        Nothing ->
+                                                          case parseEvent contents :: Maybe KeyRemove of
+                                                            Just _ -> True
+                                                            Nothing ->
+                                                              case parseEvent contents :: Maybe GroupCreate of
+                                                                Just _ -> True
+                                                                Nothing ->
+                                                                  case parseEvent contents :: Maybe GroupRemove of
+                                                                    Just _ -> True
+                                                                    Nothing ->
+                                                                      case parseEvent contents :: Maybe GroupRename of
+                                                                        Just _ -> True
+                                                                        Nothing ->
+                                                                          case parseEvent contents :: Maybe NewGroupMember of
+                                                                            Just _ -> True
+                                                                            Nothing ->
+                                                                              case parseEvent contents :: Maybe GroupMemberRemove of
+                                                                                Just _ -> True
+                                                                                Nothing ->
+                                                                                  case parseEvent contents :: Maybe Push of
+                                                                                    Just _ -> True
+                                                                                    Nothing ->
+                                                                                      case parseEvent contents :: Maybe TagPush of
+                                                                                        Just _ -> True
+                                                                                        Nothing ->
+                                                                                          case parseEvent contents :: Maybe RepositoryUpdate of
+                                                                                            Just _ -> True
+                                                                                            Nothing ->
+                                                                                              case parseEvent contents :: Maybe MergeRequestEvent of
+                                                                                                Just _ -> True
+                                                                                                Nothing ->
+                                                                                                  case parseEvent contents :: Maybe BuildEvent of
+                                                                                                    Just _ -> True
+                                                                                                    Nothing ->
+                                                                                                      case parseEvent contents :: Maybe PipelineEvent of
+                                                                                                        Just _ -> True
+                                                                                                        Nothing ->
+                                                                                                          case parseEvent contents :: Maybe IssueEvent of
+                                                                                                            Just _ -> True
+                                                                                                            Nothing ->
+                                                                                                              case parseEvent contents :: Maybe NoteEvent of
+                                                                                                                Just _ -> True
+                                                                                                                Nothing ->
+                                                                                                                  case parseEvent contents :: Maybe WikiPageEvent of
+                                                                                                                    Just _ -> True
+                                                                                                                    Nothing ->
+                                                                                                                      case parseEvent contents :: Maybe WorkItemEvent of
+                                                                                                                        Just _ -> True
+                                                                                                                        Nothing -> False
diff --git a/src/GitLab/SystemHooks/Types.hs b/src/GitLab/SystemHooks/Types.hs
--- a/src/GitLab/SystemHooks/Types.hs
+++ b/src/GitLab/SystemHooks/Types.hs
@@ -5,6 +5,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE StrictData #-}
+{-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE TypeFamilies #-}
 
 -- |
@@ -50,9 +51,37 @@
     Label (..),
     MergeRequestChanges (..),
     MergeRequestChange (..),
-    ObjectAttributes (..),
+    MergeRequestObjectAttributes (..),
     MergeParams (..),
     UserEvent (..),
+    BuildEvent (..),
+    BuildCommit (..),
+    BuildProject (..),
+    PipelineEvent (..),
+    PipelineObjectAttributes (..),
+    PipelineBuild (..),
+    IssueEvent (..),
+    IssueEventObjectAttributes (..),
+    IssueEventChanges (..),
+    IssueChangesAuthorId (..),
+    IssueChangesCreatedAt (..),
+    IssueChangesDescription (..),
+    IssueChangesId (..),
+    IssueChangesIid (..),
+    IssueChangesProjectId (..),
+    IssueChangesTitle (..),
+    IssueChangesClosedAt (..),
+    IssueChangesStateId (..),
+    IssueChangesUpdatedAt (..),
+    Runner (..),
+    ArtifactsFile (..),
+    NoteEvent (..),
+    NoteObjectAttributes (..),
+    WikiPageEvent (..),
+    Wiki (..),
+    WikiPageObjectAttributes (..),
+    WorkItemEvent (..),
+    WorkItemObjectAttributes (..),
     parseEvent,
   )
 where
@@ -465,7 +494,7 @@
     push_before :: Text,
     push_after :: Text,
     push_ref :: Text,
-    push_checkout_sha :: Text,
+    push_checkout_sha :: Maybe Text,
     push_user_id :: Int,
     push_user_name :: Text,
     push_user_username :: Maybe Text,
@@ -521,7 +550,8 @@
 
 -- | A project event.
 data ProjectEvent = ProjectEvent
-  { projectEvent_name :: Text,
+  { projectEvent_id :: Maybe Int,
+    projectEvent_name :: Text,
     projectEvent_description :: Maybe Text,
     projectEvent_web_url :: Text,
     projectEvent_avatar_url :: Maybe Text,
@@ -590,7 +620,7 @@
     mergeRequest_event_type :: Text,
     mergeRequest_user :: UserEvent,
     mergeRequest_project :: ProjectEvent,
-    mergeRequest_object_attributes :: ObjectAttributes,
+    mergeRequest_object_attributes :: MergeRequestObjectAttributes,
     mergeRequest_labels :: Maybe [Label],
     mergeRequest_changes :: MergeRequestChanges,
     mergeRequest_repository :: RepositoryEvent
@@ -637,7 +667,7 @@
   deriving (Typeable, Show, Eq, Generic)
 
 -- | Attributes associated with a merge request
-data ObjectAttributes = ObjectAttributes
+data MergeRequestObjectAttributes = MergeRequestObjectAttributes
   { objectAttributes_id :: Int,
     objectAttributes_target_branch :: Text,
     objectAttributes_source_branch :: Text,
@@ -689,9 +719,11 @@
 
 -- | User associated with a merge request
 data UserEvent = UserEvent
-  { userEvent_name :: Text,
+  { userEvent_id :: Maybe Int,
+    userEvent_name :: Text,
     userEvent_username :: Text,
-    userEvent_avatar_url :: Text
+    userEvent_avatar_url :: Text,
+    userEvent_email :: Maybe Text
   }
   deriving (Typeable, Show, Eq, Generic)
 
@@ -720,8 +752,438 @@
   | TagPushed
   | RepositoryUpdated
   | MergeRequested
+  | Built
+  | Pipelined
+  | Noted
+  | WikiPaged
+  | WorkItemed
   deriving (Show, Eq)
 
+-- | CI build
+data BuildEvent = BuildEvent
+  { build_event_object_kind :: Text,
+    build_event_ref :: Text,
+    build_event_tag :: Bool,
+    build_event_before_sha :: Text,
+    build_event_sha :: Text,
+    build_event_retries_count :: Int,
+    build_event_build_event_id :: Int,
+    build_event_build_event_name :: Text,
+    build_event_build_event_stage :: Text,
+    build_event_build_event_status :: Text,
+    build_event_created_at :: Text,
+    build_event_started_at :: Maybe Text,
+    build_event_finished_at :: Maybe Text,
+    build_event_duration :: Maybe Double,
+    build_event_queued_duration :: Maybe Double,
+    build_event_allow_failure :: Bool,
+    build_event_failure_reason :: Maybe Text,
+    build_event_pipeline_id :: Int,
+    build_event_runner :: Maybe Runner,
+    build_event_project_id :: Int,
+    build_event_project_name :: Text,
+    build_event_user :: User,
+    build_event_commit :: BuildCommit,
+    build_event_repository :: Repository,
+    build_event_project :: BuildProject,
+    build_event_environment :: Maybe Text
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+instance SystemHook BuildEvent where
+  match = Match
+  matchIf = MatchIf
+
+-- | CI build commit
+data BuildCommit = BuildCommit
+  { build_commit_id :: Int,
+    build_commit_name :: Maybe Text,
+    build_commit_sha :: Text,
+    build_commit_message :: Text,
+    build_commit_author_name :: Text,
+    build_commit_author_email :: Text,
+    build_commit_author_url :: Text,
+    build_commit_status :: Text,
+    build_commit_duration :: Maybe Int,
+    build_commit_started_at :: Maybe Text,
+    build_commit_finished_at :: Maybe Text
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | CI build commit
+data BuildProject = BuildProject
+  { build_project_project_id :: Int,
+    build_project_project_name :: Text,
+    build_project_description :: Maybe Text,
+    build_project_web_url :: Text,
+    build_project_avatar_url :: Maybe Text,
+    build_project_git_ssh_url :: Text,
+    build_project_git_http_url :: Text,
+    build_project_namespace :: Text,
+    build_project_visibility_level :: Int,
+    build_project_path_with_namespace :: Text,
+    build_project_default_branch :: Text,
+    build_project_ci_config_path :: Maybe Text
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | CI pipelines
+data PipelineEvent = PipelineEvent
+  { pipeline_event_object_kind :: Text,
+    pipeline_event_object_attributes :: PipelineObjectAttributes,
+    pipeline_event_merge_request :: Maybe Text,
+    pipeline_event_user :: User,
+    pipeline_event_project :: BuildProject,
+    pipeline_event_commit :: CommitEvent,
+    pipeline_event_builds :: [PipelineBuild]
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+instance SystemHook PipelineEvent where
+  match = Match
+  matchIf = MatchIf
+
+-- | CI pipeline attributes
+data PipelineObjectAttributes = PipelineObjectAttributes
+  { pipeline_object_attributes_id :: Int,
+    pipeline_object_attributes_iid :: Int,
+    pipeline_object_attributes_name :: Maybe Text,
+    pipeline_object_attributes_ref :: Text,
+    pipeline_object_attributes_tag :: Bool,
+    pipeline_object_attributes_sha :: Text,
+    pipeline_object_attributes_before_sha :: Text,
+    pipeline_object_attributes_source :: Text,
+    pipeline_object_attributes_status :: Text,
+    pipeline_object_attributes_detailed_status :: Text,
+    pipeline_object_attributes_stages :: [Text],
+    pipeline_object_attributes_created_at :: Text,
+    pipeline_object_attributes_finished_at :: Maybe Text,
+    pipeline_object_attributes_duration :: Maybe Double,
+    pipeline_object_attributes_queued_duration :: Maybe Double,
+    pipeline_object_attributes_variables :: [Text],
+    pipeline_object_attributes_url :: Text
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | CI pipeline attributes
+data PipelineBuild = PipelineBuild
+  { pipeline_build_id :: Int,
+    pipeline_build_stage :: Text,
+    pipeline_build_name :: Text,
+    pipeline_build_status :: Text,
+    pipeline_build_created_at :: Text,
+    pipeline_build_started_at :: Maybe Text,
+    pipeline_build_finished_at :: Maybe Text,
+    pipeline_build_duration :: Maybe Double,
+    pipeline_build_queued_duration :: Double,
+    pipeline_build_failure_reason :: Maybe Text,
+    pipeline_build_when :: Text, -- "on_success"
+    pipeline_build_manual :: Bool,
+    pipeline_build_allow_failure :: Bool,
+    pipeline_build_user :: UserEvent,
+    pipeline_build_runner :: Maybe Runner,
+    pipeline_build_artifacts_file :: ArtifactsFile,
+    pipeline_build_environment :: Maybe Text
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | CI runner
+data Runner = Runner
+  { runner_id :: Int,
+    runner_description :: Text,
+    runner_runner_type :: Text, -- "instance_type"
+    runner_active :: Bool,
+    runner_is_shared :: Bool,
+    runner_tags :: [Text]
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | CI artifacts file
+data ArtifactsFile = ArtifactsFile
+  { artifacts_file_filename :: Maybe Text,
+    artifacts_file_size :: Maybe Int
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | Issue event
+data IssueEvent = IssueEvent
+  { issue_event_event_type :: Text,
+    issue_event_user :: Maybe UserEvent,
+    issue_event_project :: Maybe ProjectEvent,
+    issue_event_object_attributes :: Maybe IssueEventObjectAttributes,
+    issue_event_labels :: Maybe [Label],
+    issue_event_changes :: Maybe IssueEventChanges,
+    issue_event_repository :: Maybe RepositoryEvent,
+    issue_event_assignees :: Maybe [UserEvent]
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+instance SystemHook IssueEvent where
+  match = Match
+  matchIf = MatchIf
+
+-- | Issue event object attributes
+data IssueEventObjectAttributes = IssueEventObjectAttributes
+  { issue_event_object_attributes_author_id :: Int,
+    issue_event_object_attributes_closed_at :: Maybe Text, -- change to UTCTime
+    issue_event_object_attributes_confidential :: Bool,
+    issue_event_object_attributes_created_at :: Text, -- change to UTCTime
+    issue_event_object_attributes_description :: Maybe Text,
+    issue_event_object_attributes_discussion_locked :: Maybe Bool,
+    issue_event_object_attributes_due_date :: Maybe Text, -- change to UTCTime
+    issue_event_object_attributes_id :: Int,
+    issue_event_object_attributes_iid :: Int,
+    issue_event_object_attributes_last_edited_at :: Maybe Text, -- change to UTCTime
+    issue_event_object_attributes_last_edited_by_id :: Maybe Int,
+    issue_event_object_attributes_milestone_id :: Maybe Int,
+    issue_event_object_attributes_move_to_id :: Maybe Int,
+    issue_event_object_attributes_duplicated_to_id :: Maybe Int,
+    issue_event_object_attributes_project_id :: Int,
+    issue_event_object_attributes_relative_position :: Maybe Int,
+    issue_event_object_attributes_state_id :: Int,
+    issue_event_object_attributes_time_estimate :: Int,
+    issue_event_object_attributes_title :: Text,
+    issue_event_object_attributes_updated_at :: Text, -- change to UTCTime
+    issue_event_object_attributes_updated_by_id :: Maybe Int,
+    issue_event_object_attributes_type :: Text, -- "Issue"
+    issue_event_object_attributes_url :: Text,
+    issue_event_object_attributes_total_time_spent :: Int,
+    issue_event_object_attributes_time_change :: Int,
+    issue_event_object_attributes_human_total_time_spent :: Maybe Int,
+    issue_event_object_attributes_human_time_change :: Maybe Int,
+    issue_event_object_attributes_human_time_estimate :: Maybe Int
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | Issue event changes
+data IssueEventChanges = IssueEventChanges
+  { issue_event_changes_author_id :: Maybe IssueChangesAuthorId,
+    issue_event_changes_created_at :: Maybe IssueChangesCreatedAt,
+    issue_event_changes_description :: Maybe IssueChangesDescription,
+    issue_event_changes_id :: Maybe IssueChangesId,
+    issue_event_changes_iid :: Maybe IssueChangesIid,
+    issue_event_changes_project_id :: Maybe IssueChangesProjectId,
+    issue_event_changes_title :: Maybe IssueChangesTitle,
+    issue_event_changes_closed_at :: Maybe IssueChangesClosedAt,
+    issue_event_changes_state_id :: Maybe IssueChangesStateId,
+    issue_event_changes_updated_at :: Maybe IssueChangesUpdatedAt
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | Issue event author ID
+data IssueChangesAuthorId = IssueChangesAuthorId
+  { issue_event_author_id_previous :: Maybe Int,
+    issue_event_author_id_current :: Int
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | Issue event created at
+data IssueChangesCreatedAt = IssueChangesCreatedAt
+  { issue_event_created_at_previous :: Maybe Text, -- change to URLTime
+    issue_event_created_at_current :: Text -- change to URLTime
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | Issue event description
+data IssueChangesDescription = IssueChangesDescription
+  { issue_event_description_previous :: Maybe Text,
+    issue_event_description_current :: Text
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | Issue event ID
+data IssueChangesId = IssueChangesId
+  { issue_event_id_previous :: Maybe Int,
+    issue_event_id_current :: Int
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | Issue event IID
+data IssueChangesIid = IssueChangesIid
+  { issue_event_iid_previous :: Maybe Int,
+    issue_event_iid_current :: Int
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | Issue event project ID
+data IssueChangesProjectId = IssueChangesProjectId
+  { issue_event_project_id_previous :: Maybe Int,
+    issue_event_project_id_current :: Int
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | Issue event title
+data IssueChangesTitle = IssueChangesTitle
+  { issue_event_title_previous :: Maybe Text,
+    issue_event_title_current :: Text
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | Issue event closed at
+data IssueChangesClosedAt = IssueChangesClosedAt
+  { issue_event_closed_at_previous :: Maybe Text, -- change to URLTime
+    issue_event_closed_at_current :: Maybe Text -- change to URLTime
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | Issue event state id
+data IssueChangesStateId = IssueChangesStateId
+  { issue_event_state_id_previous :: Maybe Int,
+    issue_event_state_id_current :: Int
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | Issue event updated at
+data IssueChangesUpdatedAt = IssueChangesUpdatedAt
+  { issue_event_updated_at_previous :: Maybe Text, -- change to URLTime
+    issue_event_updated_at_current :: Text -- change to URLTime
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- -- | Issue event state id
+-- data IssueEventUpdatedAt = IssueEventUpdatedAt
+--   { issue_event_closed_at_previous :: Maybe Text, -- change to URLTime
+--     issue_event_closed_at_current :: Text -- change to URLTime
+--   }
+--   deriving (Typeable, Show, Eq, Generic)
+
+-- | Note event
+data NoteEvent = NoteEvent
+  { note_event_object_kind :: Text,
+    note_event_event_type :: Text,
+    note_event_user :: User,
+    note_event_project_id :: Int,
+    note_event_project :: ProjectEvent,
+    note_event_object_attributes :: NoteObjectAttributes,
+    note_event_repository :: RepositoryEvent,
+    note_event_issue :: Maybe IssueEventObjectAttributes
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+instance SystemHook NoteEvent where
+  match = Match
+  matchIf = MatchIf
+
+-- | CI pipeline attributes
+data NoteObjectAttributes = NoteObjectAttributes
+  { note_object_attributes_attachment :: Maybe Text, -- ?
+    note_object_attributes_author_id :: Int,
+    note_object_attributes_change_position :: Maybe Text, -- ?
+    note_object_attributes_commit_id :: Maybe String,
+    note_object_attributes_created_at :: Text, -- change to date
+    note_object_attributes_discussion_id :: Text,
+    note_object_attributes_id :: Int,
+    note_object_attributes_line_code :: Maybe Int, -- ?
+    note_object_attributes_note :: Text,
+    note_object_attributes_noteable_id :: Maybe Int,
+    note_object_attributes_noteable_type :: Text, -- "Issue"
+    note_object_attributes_original_position :: Maybe Int, -- ?
+    note_object_attributes_position :: Maybe Int, -- ?
+    note_object_attributes_project_id :: Int,
+    note_object_attributes_resolved_at :: Maybe Text, -- date?
+    note_object_attributes_resolved_by_id :: Maybe Int,
+    note_object_attributes_resolved_by_push :: Maybe Int, -- ?
+    note_object_attributes_st_diff :: Maybe Text, -- ?
+    note_object_attributes_system :: Bool,
+    note_object_attributes_type :: Maybe Text, -- ?
+    note_object_attributes_updated_at :: Maybe Text, -- date?
+    note_object_attributes_updated_by_id :: Maybe Int, -- ?
+    note_object_attributes_description :: Text,
+    note_object_attributes_url :: Text,
+    note_object_attributes_action :: Text -- "create"
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- | Note event
+data WikiPageEvent = WikiPageEvent
+  { wiki_page_event_object_kind :: Text,
+    wiki_page_event_user :: User,
+    -- wiki_page_event_project :: Maybe Project, -- this will not parse but the JSON elements are too different from Project type
+    wiki_page_event_wiki :: Wiki,
+    wiki_page_event_object_attributes :: WikiPageObjectAttributes
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+instance SystemHook WikiPageEvent where
+  match = Match
+  matchIf = MatchIf
+
+data Wiki = Wiki
+  { wiki_web_url :: Maybe Text, -- use URL related type in future for these
+    wiki_git_ssh_url :: Maybe Text,
+    wiki_git_http_url :: Maybe Text,
+    wiki_path_with_namespace :: Maybe Text,
+    wiki_default_branch :: Maybe Text
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+data WikiPageObjectAttributes = WikiPageObjectAttributes
+  { wiki_page_object_attributes_slug :: Maybe Text,
+    wiki_page_object_attributes_title :: Maybe Text,
+    wiki_page_object_attributes_format :: Maybe Text,
+    wiki_page_object_attributes_message :: Maybe Text,
+    wiki_page_object_attributes_version_id :: Maybe Text,
+    wiki_page_object_attributes_url :: Maybe Text,
+    wiki_page_object_attributes_action :: Maybe Text, -- 'update' .. better type in future?
+    wiki_page_object_attributes_diff_url :: Maybe Text
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+-- TODO remove object_kind fields, they can be discarded after checking their values.
+
+data WorkItemEvent = WorkItemEvent
+  { work_item_event_user :: User,
+    work_item_event_object_attributes :: WorkItemObjectAttributes,
+    work_item_event_labels :: [Label],
+    -- work_item_event_changes :: Change,
+    work_item_event_repository :: Repository,
+    work_item_event_assignees :: [User]
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
+instance SystemHook WorkItemEvent where
+  match = Match
+  matchIf = MatchIf
+
+data WorkItemObjectAttributes = WorkItemObjectAttributes
+  { work_item_object_author_id :: Int,
+    work_item_object_closed_at :: Text, -- change to date type
+    work_item_object_confidential :: Bool,
+    work_item_object_created_at :: Text, -- change to date type
+    work_item_object_description :: Maybe Text,
+    work_item_object_discussion_locked :: Maybe Bool,
+    work_item_object_due_date :: Maybe Text, -- chanage to date type
+    work_item_object_id :: Int,
+    work_item_object_iid :: Int,
+    work_item_object_last_edited_at :: Maybe Text,
+    work_item_object_last_edited_by_id :: Maybe Int,
+    work_item_object_milestone_id :: Maybe Int,
+    work_item_object_moved_to_id :: Maybe Int,
+    work_item_object_duplicated_to_id :: Maybe Int,
+    work_item_object_project_id :: Int,
+    work_item_object_relative_position :: Int,
+    work_item_object_state_id :: Int,
+    work_item_object_time_estimate :: Int,
+    work_item_object_title :: Text,
+    work_item_object_updated_at :: Text,
+    work_item_object_updated_by_id :: Int,
+    work_item_object_type :: Text, -- change to own type e.g. "Task"
+    work_item_object_url :: Text,
+    work_item_object_total_time_spent :: Int,
+    work_item_object_time_change :: Int,
+    work_item_object_human_total_time_spent :: Maybe Int,
+    work_item_object_human_time_change :: Maybe Int,
+    work_item_object_human_time_estimate :: Maybe Int,
+    work_item_object_assignee_ids :: [Int],
+    work_item_object_assignee_id :: Int,
+    work_item_object_labels :: [Label],
+    work_item_object_state :: Text, -- change to own type e.g. "closed"
+    work_item_object_severity :: Text, -- change to own type e.g. "unknown"
+    work_item_object_customer_relations_contacts :: [Text],
+    work_item_object_action :: Text -- change to own type e.g. "close"
+  }
+  deriving (Typeable, Show, Eq, Generic)
+
 instance FromJSON ProjectCreate where
   parseJSON =
     withObject "ProjectCreate" $ \v -> do
@@ -1036,8 +1498,8 @@
                 <*> v .: "updated_at"
                 <*> v .: "event_name"
                 <*> v .: "name"
-                <*> v .: "owner_email"
-                <*> v .: "owner_name"
+                <*> v .:? "owner_email"
+                <*> v .:? "owner_name"
                 <*> v .: "path"
                 <*> v .: "group_id"
             _unexpected -> fail "group_create parsing failed"
@@ -1254,7 +1716,124 @@
             _unexpected -> fail "merge_request parsing failed"
         _unexpected -> fail "merge_request parsing failed"
 
+instance FromJSON BuildEvent where
+  parseJSON =
+    withObject "BuildEvent" $ \v -> do
+      isProjectEvent <- v .:? "object_kind"
+      case isProjectEvent of
+        Just theEvent ->
+          case theEvent of
+            Built ->
+              BuildEvent
+                <$> v .: "object_kind"
+                <*> v .: "ref"
+                <*> v .: "tag"
+                <*> v .: "before_sha"
+                <*> v .: "sha"
+                <*> v .: "retries_count"
+                <*> v .: "build_id"
+                <*> v .: "build_name"
+                <*> v .: "build_stage"
+                <*> v .: "build_status"
+                <*> v .: "build_created_at"
+                <*> v .: "build_started_at"
+                <*> v .: "build_finished_at"
+                <*> v .: "build_duration"
+                <*> v .: "build_queued_duration"
+                <*> v .: "build_allow_failure"
+                <*> v .: "build_failure_reason"
+                <*> v .: "pipeline_id"
+                <*> v .: "runner"
+                <*> v .: "project_id"
+                <*> v .: "project_name"
+                <*> v .: "user"
+                <*> v .: "commit"
+                <*> v .: "repository"
+                <*> v .: "project"
+                <*> v .: "environment"
+            unexpected -> fail ("build parsing failed: " <> show unexpected)
+        unexpected -> fail ("build parsing failed: " <> show unexpected)
+
+instance FromJSON PipelineEvent where
+  parseJSON =
+    withObject "Pipeline" $ \v -> do
+      isProjectEvent <- v .:? "object_kind"
+      case isProjectEvent of
+        Just theEvent ->
+          case theEvent of
+            Pipelined ->
+              PipelineEvent
+                <$> v .: "object_kind"
+                <*> v .: "object_attributes"
+                <*> v .: "merge_request"
+                <*> v .: "user"
+                <*> v .: "project"
+                <*> v .: "commit"
+                <*> v .: "builds"
+            _unexpected -> fail "build parsing failed"
+        _unexpected -> fail "build parsing failed"
+
+instance FromJSON NoteEvent where
+  parseJSON =
+    withObject "NoteEvent" $ \v -> do
+      isNoteEvent <- v .:? "object_kind"
+      case isNoteEvent of
+        Just theEvent ->
+          case theEvent of
+            Noted ->
+              NoteEvent
+                <$> v .: "object_kind"
+                <*> v .: "event_type"
+                <*> v .: "user"
+                <*> v .: "project_id"
+                <*> v .: "project"
+                <*> v .: "object_attributes"
+                <*> v .: "repository"
+                <*> v .:? "issue"
+            _unexpected -> fail "note parsing failed"
+        _unexpected -> fail "note parsing failed"
+
+instance FromJSON WikiPageEvent where
+  parseJSON =
+    withObject "WikiPageEvent" $ \v -> do
+      isWikiPageEvent <- v .:? "object_kind"
+      case isWikiPageEvent of
+        Just theEvent ->
+          case theEvent of
+            WikiPaged ->
+              WikiPageEvent
+                <$> v .: "object_kind"
+                <*> v .: "user"
+                <*> v .: "wiki"
+                <*> v .: "object_attributes"
+            _unexpected -> fail "wiki page parsing failed"
+        _unexpected -> fail "wiki page parsing failed"
+
+instance FromJSON WorkItemEvent where
+  parseJSON =
+    withObject "WorkItemEvent" $ \v -> do
+      isWorkItemEvent <- v .:? "object_kind"
+      case isWorkItemEvent of
+        Just theEvent ->
+          case theEvent of
+            WorkItemed ->
+              WorkItemEvent
+                <$> v .: "user"
+                <*> v .: "object_attributes"
+                <*> v .: "labels"
+                -- <*> v .: "changes"
+                <*> v .: "repository"
+                <*> v .: "assignees"
+            _unexpected -> fail "work item parsing failed"
+        _unexpected -> fail "work item parsing failed"
+
+-- TODO: replace bodyNoPrefix with a template Haskell based approach in src/GitLab/Types.hs
+-- e.g.
+
+-- $(deriveJSON defaultOptions {fieldLabelModifier = drop (T.length "event_"), omitNothingFields = True} ''Event)
+
 bodyNoPrefix :: String -> String
+bodyNoPrefix "projectEvent_id" = "id"
 bodyNoPrefix "projectEvent_name" = "name"
 bodyNoPrefix "projectEvent_description" = "description"
 bodyNoPrefix "projectEvent_web_url" = "web_url"
@@ -1344,7 +1923,214 @@
 bodyNoPrefix "mergeRequestChanges_updated_at" = "updated_at"
 bodyNoPrefix "mergeRequestChange_previous" = "previous"
 bodyNoPrefix "mergeRequestChange_current" = "current"
-bodyNoPrefix s = error ("uexpected JSON field prefix: " <> s)
+bodyNoPrefix "build_commit_id" = "id"
+bodyNoPrefix "build_commit_name" = "name"
+bodyNoPrefix "build_commit_sha" = "sha"
+bodyNoPrefix "build_commit_message" = "message"
+bodyNoPrefix "build_commit_author_name" = "author_name"
+bodyNoPrefix "build_commit_author_email" = "author_email"
+bodyNoPrefix "build_commit_author_url" = "author_url"
+bodyNoPrefix "build_commit_status" = "status"
+bodyNoPrefix "build_commit_duration" = "duration"
+bodyNoPrefix "build_commit_started_at" = "started_at"
+bodyNoPrefix "build_commit_finished_at" = "finished_at"
+bodyNoPrefix "build_project_project_id" = "id"
+bodyNoPrefix "build_project_project_name" = "name"
+bodyNoPrefix "build_project_description" = "description"
+bodyNoPrefix "build_project_web_url" = "web_url"
+bodyNoPrefix "build_project_avatar_url" = "avatar_url"
+bodyNoPrefix "build_project_git_ssh_url" = "git_ssh_url"
+bodyNoPrefix "build_project_git_http_url" = "git_http_url"
+bodyNoPrefix "build_project_namespace" = "namespace"
+bodyNoPrefix "build_project_visibility_level" = "visibility_level"
+bodyNoPrefix "build_project_path_with_namespace" = "path_with_namespace"
+bodyNoPrefix "build_project_default_branch" = "default_branch"
+bodyNoPrefix "build_project_ci_config_path" = "ci_config_path"
+bodyNoPrefix "pipeline_object_attributes_id" = "id"
+bodyNoPrefix "pipeline_object_attributes_iid" = "iid"
+bodyNoPrefix "pipeline_object_attributes_name" = "name"
+bodyNoPrefix "pipeline_object_attributes_ref" = "ref"
+bodyNoPrefix "pipeline_object_attributes_tag" = "tag"
+bodyNoPrefix "pipeline_object_attributes_sha" = "sha"
+bodyNoPrefix "pipeline_object_attributes_before_sha" = "before_sha"
+bodyNoPrefix "pipeline_object_attributes_source" = "source"
+bodyNoPrefix "pipeline_object_attributes_status" = "status"
+bodyNoPrefix "pipeline_object_attributes_detailed_status" = "detailed_status"
+bodyNoPrefix "pipeline_object_attributes_stages" = "stages"
+bodyNoPrefix "pipeline_object_attributes_created_at" = "created_at"
+bodyNoPrefix "pipeline_object_attributes_finished_at" = "finished_at"
+bodyNoPrefix "pipeline_object_attributes_duration" = "duration"
+bodyNoPrefix "pipeline_object_attributes_queued_duration" = "queued_duration"
+bodyNoPrefix "pipeline_object_attributes_variables" = "variables"
+bodyNoPrefix "pipeline_object_attributes_url" = "url"
+bodyNoPrefix "pipeline_build_id" = "id"
+bodyNoPrefix "pipeline_build_stage" = "stage"
+bodyNoPrefix "pipeline_build_name" = "name"
+bodyNoPrefix "pipeline_build_status" = "status"
+bodyNoPrefix "pipeline_build_created_at" = "created_at"
+bodyNoPrefix "pipeline_build_started_at" = "started_at"
+bodyNoPrefix "pipeline_build_finished_at" = "finished_at"
+bodyNoPrefix "pipeline_build_duration" = "duration"
+bodyNoPrefix "pipeline_build_queued_duration" = "queued_duration"
+bodyNoPrefix "pipeline_build_failure_reason" = "failure_reason"
+bodyNoPrefix "pipeline_build_when" = "when"
+bodyNoPrefix "pipeline_build_manual" = "manual"
+bodyNoPrefix "pipeline_build_allow_failure" = "allow_failure"
+bodyNoPrefix "pipeline_build_user" = "user"
+bodyNoPrefix "pipeline_build_runner" = "runner"
+bodyNoPrefix "pipeline_build_artifacts_file" = "artifacts_file"
+bodyNoPrefix "pipeline_build_environment" = "environment"
+bodyNoPrefix "runner_id" = "id"
+bodyNoPrefix "runner_description" = "description"
+bodyNoPrefix "runner_runner_type" = "runner_type"
+bodyNoPrefix "runner_active" = "active"
+bodyNoPrefix "runner_is_shared" = "is_shared"
+bodyNoPrefix "runner_tags" = "tags"
+bodyNoPrefix "artifacts_file_filename" = "filename"
+bodyNoPrefix "artifacts_file_size" = "size"
+bodyNoPrefix "issue_event_event_type" = "event_type"
+bodyNoPrefix "issue_event_user" = "user"
+bodyNoPrefix "issue_event_project" = "project"
+bodyNoPrefix "issue_event_object_attributes" = "object_attributes"
+bodyNoPrefix "issue_event_labels" = "labels"
+bodyNoPrefix "issue_event_changes" = "changes"
+bodyNoPrefix "issue_event_repository" = "repository"
+bodyNoPrefix "issue_event_assignees" = "assignees"
+bodyNoPrefix "issue_event_object_attributes_author_id" = "author_id"
+bodyNoPrefix "issue_event_object_attributes_closed_at" = "closed_at"
+bodyNoPrefix "issue_event_object_attributes_confidential" = "confidential"
+bodyNoPrefix "issue_event_object_attributes_created_at" = "created_at"
+bodyNoPrefix "issue_event_object_attributes_description" = "description"
+bodyNoPrefix "issue_event_object_attributes_discussion_locked" = "discussion_locked"
+bodyNoPrefix "issue_event_object_attributes_due_date" = "due_date"
+bodyNoPrefix "issue_event_object_attributes_id" = "id"
+bodyNoPrefix "issue_event_object_attributes_iid" = "iid"
+bodyNoPrefix "issue_event_object_attributes_last_edited_at" = "last_edited_at"
+bodyNoPrefix "issue_event_object_attributes_last_edited_by" = "last_edited_by"
+bodyNoPrefix "issue_event_object_attributes_milestone_id" = "milestone_id"
+bodyNoPrefix "issue_event_object_attributes_move_to_id" = "move_to_id"
+bodyNoPrefix "issue_event_object_attributes_duplicated_to_id" = "duplicated_to_id"
+bodyNoPrefix "issue_event_object_attributes_project_id" = "project_id"
+bodyNoPrefix "issue_event_object_attributes_relative_position" = "relative_position"
+bodyNoPrefix "issue_event_object_attributes_state_id" = "state_id"
+bodyNoPrefix "issue_event_object_attributes_time_estimate" = "time_estimate"
+bodyNoPrefix "issue_event_object_attributes_title" = "title"
+bodyNoPrefix "issue_event_object_attributes_updated_at" = "updated_at"
+bodyNoPrefix "issue_event_object_attributes_updated_by_id" = "updated_by_id"
+bodyNoPrefix "issue_event_object_attributes_type" = "type"
+bodyNoPrefix "issue_event_object_attributes_url" = "url"
+bodyNoPrefix "issue_event_object_attributes_total_time_spent" = "total_time_spent"
+bodyNoPrefix "issue_event_object_attributes_time_change" = "time_change"
+bodyNoPrefix "issue_event_object_attributes_human_total_time_spent" = "human_total_time_spent"
+bodyNoPrefix "issue_event_object_attributes_human_time_change" = "human_time_change"
+bodyNoPrefix "issue_event_object_attributes_human_time_estimate" = "human_time_estimate"
+bodyNoPrefix "issue_event_changes_author_id" = "author_id"
+bodyNoPrefix "issue_event_author_id_previous" = "previous"
+bodyNoPrefix "issue_event_author_id_current" = "current"
+bodyNoPrefix "issue_event_changes_created_at" = "created_at"
+bodyNoPrefix "issue_event_created_at_previous" = "previous"
+bodyNoPrefix "issue_event_created_at_current" = "current"
+bodyNoPrefix "issue_event_changes_description" = "description"
+bodyNoPrefix "issue_event_description_previous" = "previous"
+bodyNoPrefix "issue_event_description_current" = "current"
+bodyNoPrefix "issue_event_changes_id" = "id"
+bodyNoPrefix "issue_event_id_previous" = "previous"
+bodyNoPrefix "issue_event_id_current" = "current"
+bodyNoPrefix "issue_event_changes_iid" = "iid"
+bodyNoPrefix "issue_event_iid_previous" = "previous"
+bodyNoPrefix "issue_event_iid_current" = "current"
+bodyNoPrefix "issue_event_changes_project_id" = "project_id"
+bodyNoPrefix "issue_event_project_id_previous" = "previous"
+bodyNoPrefix "issue_event_project_id_current" = "current"
+bodyNoPrefix "issue_event_changes_title" = "title"
+bodyNoPrefix "issue_event_title_previous" = "previous"
+bodyNoPrefix "issue_event_title_current" = "current"
+bodyNoPrefix "issue_event_changes_updated_at" = "updated_at"
+bodyNoPrefix "issue_event_updated_at_previous" = "previous"
+bodyNoPrefix "issue_event_updated_at_current" = "current"
+bodyNoPrefix "issue_event_changes_closed_at" = "closed_at"
+bodyNoPrefix "issue_event_closed_at_previous" = "previous"
+bodyNoPrefix "issue_event_closed_at_current" = "current"
+bodyNoPrefix "issue_event_changes_state_id" = "state_id"
+bodyNoPrefix "issue_event_state_id_previous" = "previous"
+bodyNoPrefix "issue_event_state_id_current" = "current"
+bodyNoPrefix "issue_event_changes_updated_at" = "updated_at"
+bodyNoPrefix "issue_event_updated_at_previous" = "previous"
+bodyNoPrefix "issue_event_updated_at_current" = "current"
+bodyNoPrefix "note_object_attributes_attachment" = "attachment"
+bodyNoPrefix "note_object_attributes_author_id" = "author_id"
+bodyNoPrefix "note_object_attributes_change_position" = "change_position"
+bodyNoPrefix "note_object_attributes_commit_id" = "commit_id"
+bodyNoPrefix "note_object_attributes_created_at" = "created_at"
+bodyNoPrefix "note_object_attributes_discussion_id" = "discussion_id"
+bodyNoPrefix "note_object_attributes_id" = "id"
+bodyNoPrefix "note_object_attributes_line_code" = "line_code"
+bodyNoPrefix "note_object_attributes_note" = "note"
+bodyNoPrefix "note_object_attributes_noteable_id" = "noteable_id"
+bodyNoPrefix "note_object_attributes_noteable_type" = "noteable_type"
+bodyNoPrefix "note_object_attributes_original_position" = "original_position"
+bodyNoPrefix "note_object_attributes_position" = "position"
+bodyNoPrefix "note_object_attributes_project_id" = "project_id"
+bodyNoPrefix "note_object_attributes_resolved_at" = "resolved_at"
+bodyNoPrefix "note_object_attributes_resolved_by_id" = "resolved_by_id"
+bodyNoPrefix "note_object_attributes_resolved_by_push" = "resolved_by_push"
+bodyNoPrefix "note_object_attributes_st_diff" = "st_diff"
+bodyNoPrefix "note_object_attributes_system" = "system"
+bodyNoPrefix "note_object_attributes_type" = "type"
+bodyNoPrefix "note_object_attributes_updated_at" = "updated_at"
+bodyNoPrefix "note_object_attributes_updated_by_id" = "updated_by_id"
+bodyNoPrefix "note_object_attributes_description" = "description"
+bodyNoPrefix "note_object_attributes_url" = "url"
+bodyNoPrefix "note_object_attributes_action" = "action"
+bodyNoPrefix "wiki_web_url" = "web_url"
+bodyNoPrefix "wiki_git_ssh_url" = "git_ssh_url"
+bodyNoPrefix "wiki_git_http_url" = "git_http_url"
+bodyNoPrefix "wiki_path_with_namespace" = "path_with_namespace"
+bodyNoPrefix "wiki_default_branch" = "default_branch"
+bodyNoPrefix "wiki_page_object_attributes_slug" = "slug"
+bodyNoPrefix "wiki_page_object_attributes_title" = "title"
+bodyNoPrefix "wiki_page_object_attributes_format" = "format"
+bodyNoPrefix "wiki_page_object_attributes_message" = "message"
+bodyNoPrefix "wiki_page_object_attributes_version_id" = "version_id"
+bodyNoPrefix "wiki_page_object_attributes_url" = "url"
+bodyNoPrefix "wiki_page_object_attributes_action" = "action"
+bodyNoPrefix "wiki_page_object_attributes_diff_url" = "diff_url"
+bodyNoPrefix "work_item_object_author_id" = "author_id"
+bodyNoPrefix "work_item_object_closed_at" = "closed_at"
+bodyNoPrefix "work_item_object_confidential" = "confidential"
+bodyNoPrefix "work_item_object_created_at" = "created_at"
+bodyNoPrefix "work_item_object_description" = "description"
+bodyNoPrefix "work_item_object_discussion_locked" = "discussion_locked"
+bodyNoPrefix "work_item_object_due_date" = "due_date"
+bodyNoPrefix "work_item_object_id" = "id"
+bodyNoPrefix "work_item_object_iid" = "iid"
+bodyNoPrefix "work_item_object_last_edited_at" = "last_edited_at"
+bodyNoPrefix "work_item_object_last_edited_at_by_id" = "edited_at_by_id"
+bodyNoPrefix "work_item_object_milestone_id" = "milestone_id"
+bodyNoPrefix "work_item_object_moved_to_id" = "moved_to_id"
+bodyNoPrefix "work_item_object_duplicated_to_id" = "duplicated_to_id"
+bodyNoPrefix "work_item_object_project_id" = "project_id"
+bodyNoPrefix "work_item_object_relative_position" = "relative_position"
+bodyNoPrefix "work_item_object_state_id" = "state_id"
+bodyNoPrefix "work_item_object_time_estimate" = "time_estimate"
+bodyNoPrefix "work_item_object_title" = "title"
+bodyNoPrefix "work_item_object_updated_at" = "updated_at"
+bodyNoPrefix "work_item_object_updated_by_id" = "updated_by_id"
+bodyNoPrefix "work_item_object_type" = "type"
+bodyNoPrefix "work_item_object_url" = "url"
+bodyNoPrefix "work_item_object_total_time_spent" = "total_time_spent"
+bodyNoPrefix "work_item_object_time_change" = "time_change"
+bodyNoPrefix "work_item_object_human_total_time_spent" = "human_total_time_spent"
+bodyNoPrefix "work_item_object_human_time_change" = "human_time_change"
+bodyNoPrefix "work_item_object_human_time_estimate" = "human_time_estimate"
+bodyNoPrefix "work_item_object_assignee_ids" = "assignee_ids"
+bodyNoPrefix "work_item_object_assignee_id" = "assignee_id"
+bodyNoPrefix "work_item_object_labels" = "labels"
+bodyNoPrefix "work_item_object_state" = "state"
+bodyNoPrefix "work_item_object_severity" = "severity"
+bodyNoPrefix "work_item_object_customer_relations_contacts" = "customer_relations_contacts"
+bodyNoPrefix "work_item_object_action" = "action"
+bodyNoPrefix s = fail ("uexpected JSON field prefix: " <> s)
 
 instance FromJSON ProjectEvent where
   parseJSON =
@@ -1386,7 +2172,7 @@
           }
       )
 
-instance FromJSON ObjectAttributes where
+instance FromJSON MergeRequestObjectAttributes where
   parseJSON =
     genericParseJSON
       ( defaultOptions
@@ -1418,6 +2204,22 @@
           }
       )
 
+instance FromJSON BuildCommit where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON BuildProject where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
 instance (FromJSON a) => FromJSON (MergeRequestChange a) where
   parseJSON =
     genericParseJSON
@@ -1426,6 +2228,174 @@
           }
       )
 
+instance FromJSON PipelineObjectAttributes where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON PipelineBuild where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON Runner where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON ArtifactsFile where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON IssueEvent where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON IssueEventObjectAttributes where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON IssueEventChanges where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON IssueChangesAuthorId where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON IssueChangesCreatedAt where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON IssueChangesDescription where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON IssueChangesId where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON IssueChangesIid where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON IssueChangesProjectId where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON IssueChangesTitle where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON IssueChangesClosedAt where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON IssueChangesStateId where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON IssueChangesUpdatedAt where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON NoteObjectAttributes where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON Wiki where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON WikiPageObjectAttributes where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
+instance FromJSON WorkItemObjectAttributes where
+  parseJSON =
+    genericParseJSON
+      ( defaultOptions
+          { fieldLabelModifier = bodyNoPrefix
+          }
+      )
+
 instance FromJSON Label where
   parseJSON = withObject "Label" $ \obj -> do
     labelId <- obj .:? "id"
@@ -1477,4 +2447,9 @@
   parseJSON (String "tag_push") = return TagPushed
   parseJSON (String "repository_update") = return RepositoryUpdated
   parseJSON (String "merge_request") = return MergeRequested
+  parseJSON (String "build") = return Built
+  parseJSON (String "pipeline") = return Pipelined
+  parseJSON (String "note") = return Noted
+  parseJSON (String "wiki_page") = return WikiPaged
+  parseJSON (String "work_item") = return WorkItemed
   parseJSON s = fail ("unexpected system hook event: " <> show s)
diff --git a/src/GitLab/Types.hs b/src/GitLab/Types.hs
--- a/src/GitLab/Types.hs
+++ b/src/GitLab/Types.hs
@@ -154,9 +154,11 @@
   }
 
 data DebugSystemHooks
-  = -- | Report JSON objects only of unprocessed events
+  = -- | Report JSON objects about GitLab events only for unprocessed events
     UnprocessedEvents
-  | -- | Report all JSON objects received
+  | -- | Report JSON objects about GitLab events that were not successfully parsed
+    NonParsedJSON
+  | -- | Report all received JSON objects about GitLab events
     AllJSON
   deriving (Eq)
 
@@ -541,7 +543,7 @@
     user_followers :: Maybe Int,
     user_bot :: Maybe Bool,
     user_following :: Maybe Int,
-    user_state :: Text,
+    user_state :: Maybe Text,
     user_avatar_url :: Maybe Text,
     user_web_url :: Maybe Text,
     user_location :: Maybe Text,
@@ -779,11 +781,11 @@
 
 -- | repositories.
 data Repository = Repository
-  { repository_id :: Text,
+  { repository_id :: Maybe Text,
     repository_name :: Text,
-    repository_type :: Text,
-    repository_path :: Text,
-    repository_mode :: Text
+    repository_type :: Maybe Text,
+    repository_path :: Maybe Text,
+    repository_mode :: Maybe Text
   }
   deriving (Show, Eq)
 
diff --git a/tests/SystemHookTests.hs b/tests/SystemHookTests.hs
--- a/tests/SystemHookTests.hs
+++ b/tests/SystemHookTests.hs
@@ -4,6 +4,7 @@
 module SystemHookTests (systemHookTests) where
 
 import Control.Monad.IO.Class
+import Data.Maybe
 import qualified Data.Text.IO as TIO
 import GitLab
 import Test.Tasty
@@ -98,6 +99,11 @@
             >>= \eventJson -> parseEvent eventJson @?= Just groupCreatedHaskell
         ),
       testCase
+        "group-created-event2"
+        ( TIO.readFile "data/system-hooks/group-created2.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just groupCreated2Haskell
+        ),
+      testCase
         "group-removed-event"
         ( TIO.readFile "data/system-hooks/group-removed.json"
             >>= \eventJson -> parseEvent eventJson @?= Just groupRemovedHaskell
@@ -128,6 +134,11 @@
             >>= \eventJson -> parseEvent eventJson @?= Just pushHaskell
         ),
       testCase
+        "push-event-2"
+        ( TIO.readFile "data/system-hooks/push2.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just push2Haskell
+        ),
+      testCase
         "tag-push-event"
         ( TIO.readFile "data/system-hooks/tag-push.json"
             >>= \eventJson -> parseEvent eventJson @?= Just tagPushHaskell
@@ -151,6 +162,86 @@
         "repository-update-event"
         ( TIO.readFile "data/system-hooks/repository-update.json"
             >>= \eventJson -> parseEvent eventJson @?= Just repositoryUpdateHaskell
+        ),
+      testCase
+        "build1"
+        ( TIO.readFile "data/system-hooks/build.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just buildHaskell
+        ),
+      testCase
+        "build2"
+        ( TIO.readFile "data/system-hooks/build2.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just build2Haskell
+        ),
+      testCase
+        "pipeline1"
+        ( TIO.readFile "data/system-hooks/pipeline.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just pipelineHaskell
+        ),
+      testCase
+        "pipeline2"
+        ( TIO.readFile "data/system-hooks/pipeline2.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just pipeline2Haskell
+        ),
+      testCase
+        "pipeline3"
+        ( TIO.readFile "data/system-hooks/pipeline3.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just pipeline3Haskell
+        ),
+      testCase
+        "pipeline4"
+        ( TIO.readFile "data/system-hooks/pipeline4.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just pipeline4Haskell
+        ),
+      testCase
+        "pipeline5"
+        ( TIO.readFile "data/system-hooks/pipeline5.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just pipeline5Haskell
+        ),
+      testCase
+        "issue1"
+        ( TIO.readFile "data/system-hooks/issue1.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just issue1Haskell
+        ),
+      testCase
+        "issue2"
+        ( TIO.readFile "data/system-hooks/issue2.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just issue2Haskell
+        ),
+      testCase
+        "issue3"
+        ( TIO.readFile "data/system-hooks/issue3.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just issue3Haskell
+        ),
+      testCase
+        "issue4"
+        ( TIO.readFile "data/system-hooks/issue4.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just issue4Haskell
+        ),
+      testCase
+        "note1"
+        ( TIO.readFile "data/system-hooks/note1.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just note1Haskell
+        ),
+      testCase
+        "note2"
+        ( TIO.readFile "data/system-hooks/note2.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just note2Haskell
+        ),
+      testCase
+        "note3"
+        ( TIO.readFile "data/system-hooks/note3.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just note3Haskell
+        ),
+      testCase
+        "wiki-page1"
+        ( TIO.readFile "data/system-hooks/wiki-page1.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just wikiPage1Haskell
+        ),
+      testCase
+        "work-item1"
+        ( TIO.readFile "data/system-hooks/work-item1.json"
+            >>= \eventJson -> parseEvent eventJson @?= Just workItem1Haskell
         )
     ]
 
@@ -244,6 +335,12 @@
       <> matchTest "tag-push" "tag-push.json" tagPushRule "project-created.json" projectCreateRule
       <> matchTest "repository-update" "repository-update.json" repositoryUpdateRule "project-created.json" projectCreateRule
       <> matchTest "merge-request" "merge-request.json" mergeRequestRule "project-created.json" projectCreateRule
+      <> matchTest "build" "build.json" buildRule "project-created.json" projectCreateRule
+      <> matchTest "pipeline" "pipeline.json" pipelineRule "project-created.json" projectCreateRule
+      <> matchTest "issue" "issue1.json" issueRule "project-created.json" projectCreateRule
+      <> matchTest "note" "note1.json" noteRule "project-created.json" projectCreateRule
+      <> matchTest "note" "wiki-page1.json" wikiPageRule "project-created.json" projectCreateRule
+      <> matchTest "note" "work-item1.json" workItemRule "project-created.json" projectCreateRule
 
 matchIfTests :: TestTree
 matchIfTests =
@@ -272,6 +369,12 @@
       <> matchIfTest "tag-push" "tag-push.json" tagPushIfRuleYes tagPushIfRuleNo
       <> matchIfTest "repository-update" "repository-update.json" repositoryUpdateIfRuleYes repositoryUpdateIfRuleNo
       <> matchIfTest "merge-request" "merge-request.json" mergeRequestIfRuleYes mergeRequestIfRuleNo
+      <> matchIfTest "build" "build.json" buildIfRuleYes buildIfRuleNo
+      <> matchIfTest "pipeline" "pipeline.json" pipelineIfRuleYes pipelineIfRuleNo
+      <> matchIfTest "issue" "issue1.json" issueIfRuleYes issueIfRuleNo
+      <> matchIfTest "note" "note1.json" noteIfRuleYes noteIfRuleNo
+      <> matchIfTest "note" "wiki-page1.json" wikiPageIfRuleYes wikiPageIfRuleNo
+      <> matchIfTest "note" "work-item1.json" workItemIfRuleYes workItemIfRuleNo
 
 receiveTests :: TestTree
 receiveTests =
@@ -1030,7 +1133,7 @@
   matchIf
     "push rule-if yes"
     ( \event@Push {} -> do
-        return (push_checkout_sha event == "da1560886d4f094c3e6c9ef40349f7d38b5d27d7")
+        return (push_checkout_sha event == Just "da1560886d4f094c3e6c9ef40349f7d38b5d27d7")
     )
     ( \Push {} -> do
         return ()
@@ -1041,7 +1144,7 @@
   matchIf
     "push rule-if no"
     ( \event@Push {} -> do
-        return (push_checkout_sha event == "")
+        return (push_checkout_sha event == Just "")
     )
     ( \Push {} -> do
         return ()
@@ -1137,6 +1240,186 @@
         return ()
     )
 
+buildRule :: Rule
+buildRule =
+  match
+    "build rule"
+    ( \BuildEvent {} -> do
+        return ()
+    )
+
+buildIfRuleYes :: Rule
+buildIfRuleYes =
+  matchIf
+    "build rule-if yes"
+    ( \event@BuildEvent {} -> do
+        return (build_event_build_event_name event == "junit")
+    )
+    ( \BuildEvent {} -> do
+        return ()
+    )
+
+buildIfRuleNo :: Rule
+buildIfRuleNo =
+  matchIf
+    "build rule-if no"
+    ( \event@BuildEvent {} -> do
+        return (build_event_build_event_name event == "not-junit")
+    )
+    ( \BuildEvent {} -> do
+        return ()
+    )
+
+pipelineRule :: Rule
+pipelineRule =
+  match
+    "pipeline rule"
+    ( \PipelineEvent {} -> do
+        return ()
+    )
+
+pipelineIfRuleYes :: Rule
+pipelineIfRuleYes =
+  matchIf
+    "piple rule-if yes"
+    ( \event@PipelineEvent {} -> do
+        return (build_project_project_name (pipeline_event_project event) == "proj-name")
+    )
+    ( \PipelineEvent {} -> do
+        return ()
+    )
+
+pipelineIfRuleNo :: Rule
+pipelineIfRuleNo =
+  matchIf
+    "pipeline rule-if no"
+    ( \event@PipelineEvent {} -> do
+        return (build_project_project_name (pipeline_event_project event) == "proj-not-name")
+    )
+    ( \PipelineEvent {} -> do
+        return ()
+    )
+
+issueRule :: Rule
+issueRule =
+  match
+    "issue rule"
+    ( \IssueEvent {} -> do
+        return ()
+    )
+
+issueIfRuleYes :: Rule
+issueIfRuleYes =
+  matchIf
+    "issue rule-if yes"
+    ( \event@IssueEvent {} -> do
+        return (projectEvent_name (fromJust (issue_event_project event)) == "proj-name")
+    )
+    ( \IssueEvent {} -> do
+        return ()
+    )
+
+issueIfRuleNo :: Rule
+issueIfRuleNo =
+  matchIf
+    "issue rule-if no"
+    ( \event@IssueEvent {} -> do
+        return (projectEvent_name (fromJust (issue_event_project event)) == "proj-not-name")
+    )
+    ( \IssueEvent {} -> do
+        return ()
+    )
+
+noteRule :: Rule
+noteRule =
+  match
+    "note rule"
+    ( \NoteEvent {} -> do
+        return ()
+    )
+
+noteIfRuleYes :: Rule
+noteIfRuleYes =
+  matchIf
+    "note rule-if yes"
+    ( \event@NoteEvent {} -> do
+        return (user_username (note_event_user event) == "joe")
+    )
+    ( \NoteEvent {} -> do
+        return ()
+    )
+
+noteIfRuleNo :: Rule
+noteIfRuleNo =
+  matchIf
+    "note rule-if no"
+    ( \event@NoteEvent {} -> do
+        return (user_username (note_event_user event) == "not joe")
+    )
+    ( \NoteEvent {} -> do
+        return ()
+    )
+
+wikiPageRule :: Rule
+wikiPageRule =
+  match
+    "wiki page rule"
+    ( \WikiPageEvent {} -> do
+        return ()
+    )
+
+wikiPageIfRuleYes :: Rule
+wikiPageIfRuleYes =
+  matchIf
+    "wiki page rule-if yes"
+    ( \event@WikiPageEvent {} -> do
+        return (user_username (wiki_page_event_user event) == "joe")
+    )
+    ( \WikiPageEvent {} -> do
+        return ()
+    )
+
+wikiPageIfRuleNo :: Rule
+wikiPageIfRuleNo =
+  matchIf
+    "wiki page rule-if no"
+    ( \event@WikiPageEvent {} -> do
+        return (user_username (wiki_page_event_user event) == "not joe")
+    )
+    ( \WikiPageEvent {} -> do
+        return ()
+    )
+
+workItemRule :: Rule
+workItemRule =
+  match
+    "work item rule"
+    ( \WorkItemEvent {} -> do
+        return ()
+    )
+
+workItemIfRuleYes :: Rule
+workItemIfRuleYes =
+  matchIf
+    "work item rule-if yes"
+    ( \event@WorkItemEvent {} -> do
+        return (user_username (work_item_event_user event) == "joe")
+    )
+    ( \WorkItemEvent {} -> do
+        return ()
+    )
+
+workItemIfRuleNo :: Rule
+workItemIfRuleNo =
+  matchIf
+    "work item rule-if no"
+    ( \event@WorkItemEvent {} -> do
+        return (user_username (work_item_event_user event) == "not joe")
+    )
+    ( \WorkItemEvent {} -> do
+        return ()
+    )
+
 projectCreatedHaskell :: ProjectCreate
 projectCreatedHaskell =
   ProjectCreate
@@ -1368,6 +1651,10 @@
       groupCreate_group_id = 78
     }
 
+groupCreated2Haskell :: GroupCreate
+groupCreated2Haskell =
+  GroupCreate {groupCreate_created_at = "2024-11-22T12:03:34Z", groupCreate_updated_at = "2024-11-22T12:03:34Z", groupCreate_event_name = "group_create", groupCreate_name = "the-name", groupCreate_owner_email = Nothing, groupCreate_owner_name = Nothing, groupCreate_path = "the-path", groupCreate_group_id = 31780}
+
 groupRemovedHaskell :: GroupRemove
 groupRemovedHaskell =
   GroupRemove
@@ -1447,66 +1734,94 @@
 
 pushHaskell :: Push
 pushHaskell =
-  Push
-    { push_event_name = "push",
-      push_before = "95790bf891e76fee5e1747ab589903a6a1f80f22",
-      push_after = "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
-      push_ref = "refs/heads/master",
-      push_checkout_sha = "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
-      push_user_id = 4,
-      push_user_name = "John Smith",
-      push_user_email = Just "john@example.com",
-      push_user_username = Just "abc1",
-      push_user_avatar = "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80",
-      push_project_id = 15,
-      push_project = ProjectEvent {projectEvent_name = "Diaspora", projectEvent_description = Just "", projectEvent_web_url = "http://example.com/mike/diaspora", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:mike/diaspora.git", projectEvent_git_http_url = "http://example.com/mike/diaspora.git", projectEvent_namespace = "Mike", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "mike/diaspora", projectEvent_default_branch = "master", projectEvent_homepage = Just "http://example.com/mike/diaspora", projectEvent_url = "git@example.com:mike/diaspora.git", projectEvent_ssh_url = "git@example.com:mike/diaspora.git", projectEvent_http_url = "http://example.com/mike/diaspora.git"},
-      push_repository = RepositoryEvent {repositoryEvent_name = "Diaspora", repositoryEvent_url = "git@example.com:mike/diaspora.git", repositoryEvent_description = Just "", repositoryEvent_homepage = Just "http://example.com/mike/diaspora", repositoryEvent_git_http_url = Just "http://example.com/mike/diaspora.git", repositoryEvent_git_ssh_url = Just "git@example.com:mike/diaspora.git", repositoryEvent_visibility_level = Just Private},
-      push_commits = [CommitEvent {commitEvent_id = "c5feabde2d8cd023215af4d2ceeb7a64839fc428", commitEvent_message = "Add simple search to projects in public area", commitEvent_timestamp = "2013-05-13T18:18:08+00:00", commitEvent_url = "https://dev.gitlab.org/gitlab/gitlabhq/commit/c5feabde2d8cd023215af4d2ceeb7a64839fc428", commitEvent_author = CommitAuthorEvent {commitAuthorEvent_name = "Example User", commitAuthorEvent_email = "user@example.com"}}],
-      push_total_commits_count = 1
-    }
+  Push {push_event_name = "push", push_before = "95790bf891e76fee5e1747ab589903a6a1f80f22", push_after = "da1560886d4f094c3e6c9ef40349f7d38b5d27d7", push_ref = "refs/heads/master", push_checkout_sha = Just "da1560886d4f094c3e6c9ef40349f7d38b5d27d7", push_user_id = 4, push_user_name = "John Smith", push_user_username = Just "abc1", push_user_email = Just "john@example.com", push_user_avatar = "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80", push_project_id = 15, push_project = ProjectEvent {projectEvent_id = Nothing, projectEvent_name = "Diaspora", projectEvent_description = Just "", projectEvent_web_url = "http://example.com/mike/diaspora", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:mike/diaspora.git", projectEvent_git_http_url = "http://example.com/mike/diaspora.git", projectEvent_namespace = "Mike", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "mike/diaspora", projectEvent_default_branch = "master", projectEvent_homepage = Just "http://example.com/mike/diaspora", projectEvent_url = "git@example.com:mike/diaspora.git", projectEvent_ssh_url = "git@example.com:mike/diaspora.git", projectEvent_http_url = "http://example.com/mike/diaspora.git"}, push_repository = RepositoryEvent {repositoryEvent_name = "Diaspora", repositoryEvent_url = "git@example.com:mike/diaspora.git", repositoryEvent_description = Just "", repositoryEvent_homepage = Just "http://example.com/mike/diaspora", repositoryEvent_git_http_url = Just "http://example.com/mike/diaspora.git", repositoryEvent_git_ssh_url = Just "git@example.com:mike/diaspora.git", repositoryEvent_visibility_level = Just Private}, push_commits = [CommitEvent {commitEvent_id = "c5feabde2d8cd023215af4d2ceeb7a64839fc428", commitEvent_message = "Add simple search to projects in public area", commitEvent_timestamp = "2013-05-13T18:18:08+00:00", commitEvent_url = "https://dev.gitlab.org/gitlab/gitlabhq/commit/c5feabde2d8cd023215af4d2ceeb7a64839fc428", commitEvent_author = CommitAuthorEvent {commitAuthorEvent_name = "Example User", commitAuthorEvent_email = "user@example.com"}}], push_total_commits_count = 1}
 
+push2Haskell :: Push
+push2Haskell =
+  Push {push_event_name = "push", push_before = "edcba", push_after = "0000000000000000000000000000000000000000", push_ref = "refs/heads/Rohan", push_checkout_sha = Nothing, push_user_id = 2583, push_user_name = "Joe", push_user_username = Just "joe", push_user_email = Nothing, push_user_avatar = "https://secure.gravatar.com/avatar/abc", push_project_id = 25811, push_project = ProjectEvent {projectEvent_id = Just 25811, projectEvent_name = "The project name", projectEvent_description = Nothing, projectEvent_web_url = "https://example.com/joe/proj-name", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:joe/proj-name.git", projectEvent_git_http_url = "https://example.com/joe/proj-name.git", projectEvent_namespace = "The namespace", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe/proj-name", projectEvent_default_branch = "main", projectEvent_homepage = Just "https://example.com/joe/proj-name", projectEvent_url = "git@example.com:joe/proj-name.git", projectEvent_ssh_url = "git@example.com:joe/proj-name.git", projectEvent_http_url = "https://example.com/joe/proj-name.git"}, push_repository = RepositoryEvent {repositoryEvent_name = "The project name", repositoryEvent_url = "git@example.com:joe/proj-name.git", repositoryEvent_description = Nothing, repositoryEvent_homepage = Just "https://example.com/joe/proj-name", repositoryEvent_git_http_url = Just "https://example.com/joe/proj-name.git", repositoryEvent_git_ssh_url = Just "git@example.com:joe/proj-name.git", repositoryEvent_visibility_level = Just Private}, push_commits = [], push_total_commits_count = 0}
+
 tagPushHaskell :: TagPush
 tagPushHaskell =
-  TagPush
-    { tagPush_event_name = "tag_push",
-      tagPush_before = "0000000000000000000000000000000000000000",
-      tagPush_after = "82b3d5ae55f7080f1e6022629cdb57bfae7cccc7",
-      tagPush_ref = "refs/tags/v1.0.0",
-      tagPush_checkout_sha = "5937ac0a7beb003549fc5fd26fc247adbce4a52e",
-      tagPush_user_id = 1,
-      tagPush_user_name = "John Smith",
-      tagPush_user_avatar = "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80",
-      tagPush_project_id = 1,
-      tagPush_project = ProjectEvent {projectEvent_name = "Example", projectEvent_description = Just "", projectEvent_web_url = "http://example.com/jsmith/example", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:jsmith/example.git", projectEvent_git_http_url = "http://example.com/jsmith/example.git", projectEvent_namespace = "Jsmith", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "jsmith/example", projectEvent_default_branch = "master", projectEvent_homepage = Just "http://example.com/jsmith/example", projectEvent_url = "git@example.com:jsmith/example.git", projectEvent_ssh_url = "git@example.com:jsmith/example.git", projectEvent_http_url = "http://example.com/jsmith/example.git"},
-      tagPush_repository = RepositoryEvent {repositoryEvent_name = "Example", repositoryEvent_url = "ssh://git@example.com/jsmith/example.git", repositoryEvent_description = Just "", repositoryEvent_homepage = Just "http://example.com/jsmith/example", repositoryEvent_git_http_url = Just "http://example.com/jsmith/example.git", repositoryEvent_git_ssh_url = Just "git@example.com:jsmith/example.git", repositoryEvent_visibility_level = Just Private},
-      tagPush_commits = [],
-      tagPush_total_commits_count = 0
-    }
+  TagPush {tagPush_event_name = "tag_push", tagPush_before = "0000000000000000000000000000000000000000", tagPush_after = "82b3d5ae55f7080f1e6022629cdb57bfae7cccc7", tagPush_ref = "refs/tags/v1.0.0", tagPush_checkout_sha = "5937ac0a7beb003549fc5fd26fc247adbce4a52e", tagPush_user_id = 1, tagPush_user_name = "John Smith", tagPush_user_avatar = "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80", tagPush_project_id = 1, tagPush_project = ProjectEvent {projectEvent_id = Nothing, projectEvent_name = "Example", projectEvent_description = Just "", projectEvent_web_url = "http://example.com/jsmith/example", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:jsmith/example.git", projectEvent_git_http_url = "http://example.com/jsmith/example.git", projectEvent_namespace = "Jsmith", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "jsmith/example", projectEvent_default_branch = "master", projectEvent_homepage = Just "http://example.com/jsmith/example", projectEvent_url = "git@example.com:jsmith/example.git", projectEvent_ssh_url = "git@example.com:jsmith/example.git", projectEvent_http_url = "http://example.com/jsmith/example.git"}, tagPush_repository = RepositoryEvent {repositoryEvent_name = "Example", repositoryEvent_url = "ssh://git@example.com/jsmith/example.git", repositoryEvent_description = Just "", repositoryEvent_homepage = Just "http://example.com/jsmith/example", repositoryEvent_git_http_url = Just "http://example.com/jsmith/example.git", repositoryEvent_git_ssh_url = Just "git@example.com:jsmith/example.git", repositoryEvent_visibility_level = Just Private}, tagPush_commits = [], tagPush_total_commits_count = 0}
 
 repositoryUpdateHaskell :: RepositoryUpdate
 repositoryUpdateHaskell =
-  RepositoryUpdate
-    { repositoryUpdate_event_name = "repository_update",
-      repositoryUpdate_user_id = 1,
-      repositoryUpdate_user_name = "John Smith",
-      repositoryUpdate_user_email = "admin@example.com",
-      repositoryUpdate_user_avatar = "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80",
-      repositoryUpdate_project_id = 1,
-      repositoryUpdate_project = ProjectEvent {projectEvent_name = "Example", projectEvent_description = Just "", projectEvent_web_url = "http://example.com/jsmith/example", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:jsmith/example.git", projectEvent_git_http_url = "http://example.com/jsmith/example.git", projectEvent_namespace = "Jsmith", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "jsmith/example", projectEvent_default_branch = "master", projectEvent_homepage = Just "http://example.com/jsmith/example", projectEvent_url = "git@example.com:jsmith/example.git", projectEvent_ssh_url = "git@example.com:jsmith/example.git", projectEvent_http_url = "http://example.com/jsmith/example.git"},
-      repositoryUpdate_changes = [ProjectChanges {projectChanges_before = "8205ea8d81ce0c6b90fbe8280d118cc9fdad6130", projectChanges_after = "4045ea7a3df38697b3730a20fb73c8bed8a3e69e", projectChanges_ref = "refs/heads/master"}],
-      repositoryUpdate_refs = ["refs/heads/master"]
-    }
+  RepositoryUpdate {repositoryUpdate_event_name = "repository_update", repositoryUpdate_user_id = 1, repositoryUpdate_user_name = "John Smith", repositoryUpdate_user_email = "admin@example.com", repositoryUpdate_user_avatar = "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80", repositoryUpdate_project_id = 1, repositoryUpdate_project = ProjectEvent {projectEvent_id = Nothing, projectEvent_name = "Example", projectEvent_description = Just "", projectEvent_web_url = "http://example.com/jsmith/example", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:jsmith/example.git", projectEvent_git_http_url = "http://example.com/jsmith/example.git", projectEvent_namespace = "Jsmith", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "jsmith/example", projectEvent_default_branch = "master", projectEvent_homepage = Just "http://example.com/jsmith/example", projectEvent_url = "git@example.com:jsmith/example.git", projectEvent_ssh_url = "git@example.com:jsmith/example.git", projectEvent_http_url = "http://example.com/jsmith/example.git"}, repositoryUpdate_changes = [ProjectChanges {projectChanges_before = "8205ea8d81ce0c6b90fbe8280d118cc9fdad6130", projectChanges_after = "4045ea7a3df38697b3730a20fb73c8bed8a3e69e", projectChanges_ref = "refs/heads/master"}], repositoryUpdate_refs = ["refs/heads/master"]}
 
 mergeRequestHaskell :: MergeRequestEvent
 mergeRequestHaskell =
-  MergeRequestEvent {mergeRequest_object_kind = "merge_request", mergeRequest_event_type = "merge_request", mergeRequest_user = UserEvent {userEvent_name = "Administrator", userEvent_username = "root", userEvent_avatar_url = "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40&d=identicon"}, mergeRequest_project = ProjectEvent {projectEvent_name = "Gitlab Test", projectEvent_description = Just "Aut reprehenderit ut est.", projectEvent_web_url = "http://example.com/gitlabhq/gitlab-test", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:gitlabhq/gitlab-test.git", projectEvent_git_http_url = "http://example.com/gitlabhq/gitlab-test.git", projectEvent_namespace = "GitlabHQ", projectEvent_visibility_level = Public, projectEvent_path_with_namespace = "gitlabhq/gitlab-test", projectEvent_default_branch = "master", projectEvent_homepage = Just "http://example.com/gitlabhq/gitlab-test", projectEvent_url = "http://example.com/gitlabhq/gitlab-test.git", projectEvent_ssh_url = "git@example.com:gitlabhq/gitlab-test.git", projectEvent_http_url = "http://example.com/gitlabhq/gitlab-test.git"}, mergeRequest_object_attributes = ObjectAttributes {objectAttributes_id = 99, objectAttributes_target_branch = "master", objectAttributes_source_branch = "ms-viewport", objectAttributes_source_project_id = 14, objectAttributes_author_id = Just 51, objectAttributes_assignee_id = Just 6, objectAttributes_assignee_ids = Nothing, objectAttributes_title = "MS-Viewport", objectAttributes_created_at = "2013-12-03T17:23:34Z", objectAttributes_updated_at = "2013-12-03T17:23:34Z", objectAttributes_milestone_id = Nothing, objectAttributes_state = "opened", objectAttributes_state_id = Nothing, objectAttributes_merge_status = "unchecked", objectAttributes_target_project_id = 14, objectAttributes_iid = 1, objectAttributes_description = "", objectAttributes_updated_by_id = Nothing, objectAttributes_merge_error = Nothing, objectAttributes_merge_params = Nothing, objectAttributes_merge_when_pipeline_succeeds = Nothing, objectAttributes_merge_user_id = Nothing, objectAttributes_merge_commit_sha = Nothing, objectAttributes_deleted_at = Nothing, objectAttributes_in_progress_merge_commit_sha = Nothing, objectAttributes_lock_version = Nothing, objectAttributes_time_estimate = Nothing, objectAttributes_last_edited_at = Nothing, objectAttributes_last_edited_by_id = Nothing, objectAttributes_head_pipeline_id = Nothing, objectAttributes_ref_fetched = Nothing, objectAttributes_merge_jid = Nothing, objectAttributes_source = ProjectEvent {projectEvent_name = "Awesome Project", projectEvent_description = Just "Aut reprehenderit ut est.", projectEvent_web_url = "http://example.com/awesome_space/awesome_project", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:awesome_space/awesome_project.git", projectEvent_git_http_url = "http://example.com/awesome_space/awesome_project.git", projectEvent_namespace = "Awesome Space", projectEvent_visibility_level = Public, projectEvent_path_with_namespace = "awesome_space/awesome_project", projectEvent_default_branch = "master", projectEvent_homepage = Just "http://example.com/awesome_space/awesome_project", projectEvent_url = "http://example.com/awesome_space/awesome_project.git", projectEvent_ssh_url = "git@example.com:awesome_space/awesome_project.git", projectEvent_http_url = "http://example.com/awesome_space/awesome_project.git"}, objectAttributes_target = ProjectEvent {projectEvent_name = "Awesome Project", projectEvent_description = Just "Aut reprehenderit ut est.", projectEvent_web_url = "http://example.com/awesome_space/awesome_project", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:awesome_space/awesome_project.git", projectEvent_git_http_url = "http://example.com/awesome_space/awesome_project.git", projectEvent_namespace = "Awesome Space", projectEvent_visibility_level = Public, projectEvent_path_with_namespace = "awesome_space/awesome_project", projectEvent_default_branch = "master", projectEvent_homepage = Just "http://example.com/awesome_space/awesome_project", projectEvent_url = "http://example.com/awesome_space/awesome_project.git", projectEvent_ssh_url = "git@example.com:awesome_space/awesome_project.git", projectEvent_http_url = "http://example.com/awesome_space/awesome_project.git"}, objectAttributes_last_commit = CommitEvent {commitEvent_id = "da1560886d4f094c3e6c9ef40349f7d38b5d27d7", commitEvent_message = "fixed readme", commitEvent_timestamp = "2012-01-03T23:36:29+02:00", commitEvent_url = "http://example.com/awesome_space/awesome_project/commits/da1560886d4f094c3e6c9ef40349f7d38b5d27d7", commitEvent_author = CommitAuthorEvent {commitAuthorEvent_name = "GitLab dev user", commitAuthorEvent_email = "gitlabdev@dv6700.(none)"}}, objectAttributes_work_in_progress = False, objectAttributes_total_time_spent = Nothing, objectAttributes_human_total_time_spent = Nothing, objectAttributes_human_time_estimate = Nothing, objectAttributes_action = Just "open"}, mergeRequest_labels = Just [Label {label_id = Just 206, label_title = Just "API", label_color = Just "#ffffff", label_project_id = Just 14, label_created_at = Just "2013-12-03T17:15:43Z", label_updated_at = Just "2013-12-03T17:15:43Z", label_template = Just False, label_description = Just "API related issues", label_type = Just "ProjectLabel", label_group_id = Just 41}], mergeRequest_changes = MergeRequestChanges {mergeRequestChanges_author_id = Nothing, mergeRequestChanges_created_at = Nothing, mergeRequestChanges_description = Nothing, mergeRequestChanges_id = Nothing, mergeRequestChanges_iid = Nothing, mergeRequestChanges_source_branch = Nothing, mergeRequestChanges_source_project_id = Nothing, mergeRequestChanges_target_branch = Nothing, mergeRequestChanges_target_project_id = Nothing, mergeRequestChanges_title = Nothing, mergeRequestChanges_updated_at = Just (MergeRequestChange {mergeRequestChange_previous = Just "2017-09-15 16:50:55 UTC", mergeRequestChange_current = Just "2017-09-15 16:52:00 UTC"})}, mergeRequest_repository = RepositoryEvent {repositoryEvent_name = "Gitlab Test", repositoryEvent_url = "http://example.com/gitlabhq/gitlab-test.git", repositoryEvent_description = Just "Aut reprehenderit ut est.", repositoryEvent_homepage = Just "http://example.com/gitlabhq/gitlab-test", repositoryEvent_git_http_url = Nothing, repositoryEvent_git_ssh_url = Nothing, repositoryEvent_visibility_level = Nothing}}
+  MergeRequestEvent {mergeRequest_object_kind = "merge_request", mergeRequest_event_type = "merge_request", mergeRequest_user = UserEvent {userEvent_id = Nothing, userEvent_name = "Administrator", userEvent_username = "root", userEvent_avatar_url = "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40&d=identicon", userEvent_email = Nothing}, mergeRequest_project = ProjectEvent {projectEvent_id = Just 1, projectEvent_name = "Gitlab Test", projectEvent_description = Just "Aut reprehenderit ut est.", projectEvent_web_url = "http://example.com/gitlabhq/gitlab-test", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:gitlabhq/gitlab-test.git", projectEvent_git_http_url = "http://example.com/gitlabhq/gitlab-test.git", projectEvent_namespace = "GitlabHQ", projectEvent_visibility_level = Public, projectEvent_path_with_namespace = "gitlabhq/gitlab-test", projectEvent_default_branch = "master", projectEvent_homepage = Just "http://example.com/gitlabhq/gitlab-test", projectEvent_url = "http://example.com/gitlabhq/gitlab-test.git", projectEvent_ssh_url = "git@example.com:gitlabhq/gitlab-test.git", projectEvent_http_url = "http://example.com/gitlabhq/gitlab-test.git"}, mergeRequest_object_attributes = MergeRequestObjectAttributes {objectAttributes_id = 99, objectAttributes_target_branch = "master", objectAttributes_source_branch = "ms-viewport", objectAttributes_source_project_id = 14, objectAttributes_author_id = Just 51, objectAttributes_assignee_id = Just 6, objectAttributes_assignee_ids = Nothing, objectAttributes_title = "MS-Viewport", objectAttributes_created_at = "2013-12-03T17:23:34Z", objectAttributes_updated_at = "2013-12-03T17:23:34Z", objectAttributes_milestone_id = Nothing, objectAttributes_state = "opened", objectAttributes_state_id = Nothing, objectAttributes_merge_status = "unchecked", objectAttributes_target_project_id = 14, objectAttributes_iid = 1, objectAttributes_description = "", objectAttributes_updated_by_id = Nothing, objectAttributes_merge_error = Nothing, objectAttributes_merge_params = Nothing, objectAttributes_merge_when_pipeline_succeeds = Nothing, objectAttributes_merge_user_id = Nothing, objectAttributes_merge_commit_sha = Nothing, objectAttributes_deleted_at = Nothing, objectAttributes_in_progress_merge_commit_sha = Nothing, objectAttributes_lock_version = Nothing, objectAttributes_time_estimate = Nothing, objectAttributes_last_edited_at = Nothing, objectAttributes_last_edited_by_id = Nothing, objectAttributes_head_pipeline_id = Nothing, objectAttributes_ref_fetched = Nothing, objectAttributes_merge_jid = Nothing, objectAttributes_source = ProjectEvent {projectEvent_id = Nothing, projectEvent_name = "Awesome Project", projectEvent_description = Just "Aut reprehenderit ut est.", projectEvent_web_url = "http://example.com/awesome_space/awesome_project", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:awesome_space/awesome_project.git", projectEvent_git_http_url = "http://example.com/awesome_space/awesome_project.git", projectEvent_namespace = "Awesome Space", projectEvent_visibility_level = Public, projectEvent_path_with_namespace = "awesome_space/awesome_project", projectEvent_default_branch = "master", projectEvent_homepage = Just "http://example.com/awesome_space/awesome_project", projectEvent_url = "http://example.com/awesome_space/awesome_project.git", projectEvent_ssh_url = "git@example.com:awesome_space/awesome_project.git", projectEvent_http_url = "http://example.com/awesome_space/awesome_project.git"}, objectAttributes_target = ProjectEvent {projectEvent_id = Nothing, projectEvent_name = "Awesome Project", projectEvent_description = Just "Aut reprehenderit ut est.", projectEvent_web_url = "http://example.com/awesome_space/awesome_project", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:awesome_space/awesome_project.git", projectEvent_git_http_url = "http://example.com/awesome_space/awesome_project.git", projectEvent_namespace = "Awesome Space", projectEvent_visibility_level = Public, projectEvent_path_with_namespace = "awesome_space/awesome_project", projectEvent_default_branch = "master", projectEvent_homepage = Just "http://example.com/awesome_space/awesome_project", projectEvent_url = "http://example.com/awesome_space/awesome_project.git", projectEvent_ssh_url = "git@example.com:awesome_space/awesome_project.git", projectEvent_http_url = "http://example.com/awesome_space/awesome_project.git"}, objectAttributes_last_commit = CommitEvent {commitEvent_id = "da1560886d4f094c3e6c9ef40349f7d38b5d27d7", commitEvent_message = "fixed readme", commitEvent_timestamp = "2012-01-03T23:36:29+02:00", commitEvent_url = "http://example.com/awesome_space/awesome_project/commits/da1560886d4f094c3e6c9ef40349f7d38b5d27d7", commitEvent_author = CommitAuthorEvent {commitAuthorEvent_name = "GitLab dev user", commitAuthorEvent_email = "gitlabdev@dv6700.(none)"}}, objectAttributes_work_in_progress = False, objectAttributes_total_time_spent = Nothing, objectAttributes_human_total_time_spent = Nothing, objectAttributes_human_time_estimate = Nothing, objectAttributes_action = Just "open"}, mergeRequest_labels = Just [Label {label_id = Just 206, label_title = Just "API", label_color = Just "#ffffff", label_project_id = Just 14, label_created_at = Just "2013-12-03T17:15:43Z", label_updated_at = Just "2013-12-03T17:15:43Z", label_template = Just False, label_description = Just "API related issues", label_type = Just "ProjectLabel", label_group_id = Just 41}], mergeRequest_changes = MergeRequestChanges {mergeRequestChanges_author_id = Nothing, mergeRequestChanges_created_at = Nothing, mergeRequestChanges_description = Nothing, mergeRequestChanges_id = Nothing, mergeRequestChanges_iid = Nothing, mergeRequestChanges_source_branch = Nothing, mergeRequestChanges_source_project_id = Nothing, mergeRequestChanges_target_branch = Nothing, mergeRequestChanges_target_project_id = Nothing, mergeRequestChanges_title = Nothing, mergeRequestChanges_updated_at = Just (MergeRequestChange {mergeRequestChange_previous = Just "2017-09-15 16:50:55 UTC", mergeRequestChange_current = Just "2017-09-15 16:52:00 UTC"})}, mergeRequest_repository = RepositoryEvent {repositoryEvent_name = "Gitlab Test", repositoryEvent_url = "http://example.com/gitlabhq/gitlab-test.git", repositoryEvent_description = Just "Aut reprehenderit ut est.", repositoryEvent_homepage = Just "http://example.com/gitlabhq/gitlab-test", repositoryEvent_git_http_url = Nothing, repositoryEvent_git_ssh_url = Nothing, repositoryEvent_visibility_level = Nothing}}
 
 mergeRequestGitLab_15_5_0_Haskell :: MergeRequestEvent
 mergeRequestGitLab_15_5_0_Haskell =
-  MergeRequestEvent {mergeRequest_object_kind = "merge_request", mergeRequest_event_type = "merge_request", mergeRequest_user = UserEvent {userEvent_name = "Joe Bloggs", userEvent_username = "joe", userEvent_avatar_url = "https://gitlab.example.com/uploads/-/system/user/avatar/5/avatar.png"}, mergeRequest_project = ProjectEvent {projectEvent_name = "test-ci-project", projectEvent_description = Just "", projectEvent_web_url = "https://gitlab.example.com/joe/test-ci-project", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_git_http_url = "https://gitlab.example.com/joe/test-ci-project.git", projectEvent_namespace = "Joe Bloggs", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe/test-ci-project", projectEvent_default_branch = "master", projectEvent_homepage = Just "https://gitlab.example.com/joe/test-ci-project", projectEvent_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_ssh_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_http_url = "https://gitlab.example.com/joe/test-ci-project.git"}, mergeRequest_object_attributes = ObjectAttributes {objectAttributes_id = 3448, objectAttributes_target_branch = "master", objectAttributes_source_branch = "another-branch", objectAttributes_source_project_id = 7926, objectAttributes_author_id = Just 5, objectAttributes_assignee_id = Nothing, objectAttributes_assignee_ids = Just [], objectAttributes_title = "A change", objectAttributes_created_at = "2022-10-24 22:11:46 UTC", objectAttributes_updated_at = "2022-10-24 22:11:46 UTC", objectAttributes_milestone_id = Nothing, objectAttributes_state = "opened", objectAttributes_state_id = Just 1, objectAttributes_merge_status = "preparing", objectAttributes_target_project_id = 7926, objectAttributes_iid = 1, objectAttributes_description = "To test the merge request event.", objectAttributes_updated_by_id = Nothing, objectAttributes_merge_error = Nothing, objectAttributes_merge_params = Just (MergeParams {mergeParams_force_remove_source_branch = Just "1"}), objectAttributes_merge_when_pipeline_succeeds = Just False, objectAttributes_merge_user_id = Nothing, objectAttributes_merge_commit_sha = Nothing, objectAttributes_deleted_at = Nothing, objectAttributes_in_progress_merge_commit_sha = Nothing, objectAttributes_lock_version = Nothing, objectAttributes_time_estimate = Just 0, objectAttributes_last_edited_at = Nothing, objectAttributes_last_edited_by_id = Nothing, objectAttributes_head_pipeline_id = Nothing, objectAttributes_ref_fetched = Nothing, objectAttributes_merge_jid = Nothing, objectAttributes_source = ProjectEvent {projectEvent_name = "test-ci-project", projectEvent_description = Just "", projectEvent_web_url = "https://gitlab.example.com/joe/test-ci-project", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_git_http_url = "https://gitlab.example.com/joe/test-ci-project.git", projectEvent_namespace = "Joe Bloggs", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe/test-ci-project", projectEvent_default_branch = "master", projectEvent_homepage = Just "https://gitlab.example.com/joe/test-ci-project", projectEvent_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_ssh_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_http_url = "https://gitlab.example.com/joe/test-ci-project.git"}, objectAttributes_target = ProjectEvent {projectEvent_name = "test-ci-project", projectEvent_description = Just "", projectEvent_web_url = "https://gitlab.example.com/joe/test-ci-project", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_git_http_url = "https://gitlab.example.com/joe/test-ci-project.git", projectEvent_namespace = "Joe Bloggs", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe/test-ci-project", projectEvent_default_branch = "master", projectEvent_homepage = Just "https://gitlab.example.com/joe/test-ci-project", projectEvent_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_ssh_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_http_url = "https://gitlab.example.com/joe/test-ci-project.git"}, objectAttributes_last_commit = CommitEvent {commitEvent_id = "83c2d70f8ecb1376d1d4f1e52b7a18c560a7b95c", commitEvent_message = "A change\n", commitEvent_timestamp = "2022-10-24T23:10:03+01:00", commitEvent_url = "https://gitlab.example.com/joe/test-ci-project/-/commit/83c2d70f8ecb1376d1d4f1e52b7a18c560a7b95c", commitEvent_author = CommitAuthorEvent {commitAuthorEvent_name = "Joe Bloggs", commitAuthorEvent_email = "robstewart57@gmail.com"}}, objectAttributes_work_in_progress = False, objectAttributes_total_time_spent = Just 0, objectAttributes_human_total_time_spent = Nothing, objectAttributes_human_time_estimate = Nothing, objectAttributes_action = Just "open"}, mergeRequest_labels = Just [], mergeRequest_changes = MergeRequestChanges {mergeRequestChanges_author_id = Nothing, mergeRequestChanges_created_at = Nothing, mergeRequestChanges_description = Nothing, mergeRequestChanges_id = Nothing, mergeRequestChanges_iid = Nothing, mergeRequestChanges_source_branch = Nothing, mergeRequestChanges_source_project_id = Nothing, mergeRequestChanges_target_branch = Nothing, mergeRequestChanges_target_project_id = Nothing, mergeRequestChanges_title = Nothing, mergeRequestChanges_updated_at = Nothing}, mergeRequest_repository = RepositoryEvent {repositoryEvent_name = "test-ci-project", repositoryEvent_url = "git@gitlab.example.com:joe/test-ci-project.git", repositoryEvent_description = Just "", repositoryEvent_homepage = Just "https://gitlab.example.com/joe/test-ci-project", repositoryEvent_git_http_url = Nothing, repositoryEvent_git_ssh_url = Nothing, repositoryEvent_visibility_level = Nothing}}
+  MergeRequestEvent {mergeRequest_object_kind = "merge_request", mergeRequest_event_type = "merge_request", mergeRequest_user = UserEvent {userEvent_id = Nothing, userEvent_name = "Joe Bloggs", userEvent_username = "joe", userEvent_avatar_url = "https://gitlab.example.com/uploads/-/system/user/avatar/5/avatar.png", userEvent_email = Nothing}, mergeRequest_project = ProjectEvent {projectEvent_id = Just 7926, projectEvent_name = "test-ci-project", projectEvent_description = Just "", projectEvent_web_url = "https://gitlab.example.com/joe/test-ci-project", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_git_http_url = "https://gitlab.example.com/joe/test-ci-project.git", projectEvent_namespace = "Joe Bloggs", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe/test-ci-project", projectEvent_default_branch = "master", projectEvent_homepage = Just "https://gitlab.example.com/joe/test-ci-project", projectEvent_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_ssh_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_http_url = "https://gitlab.example.com/joe/test-ci-project.git"}, mergeRequest_object_attributes = MergeRequestObjectAttributes {objectAttributes_id = 3448, objectAttributes_target_branch = "master", objectAttributes_source_branch = "another-branch", objectAttributes_source_project_id = 7926, objectAttributes_author_id = Just 5, objectAttributes_assignee_id = Nothing, objectAttributes_assignee_ids = Just [], objectAttributes_title = "A change", objectAttributes_created_at = "2022-10-24 22:11:46 UTC", objectAttributes_updated_at = "2022-10-24 22:11:46 UTC", objectAttributes_milestone_id = Nothing, objectAttributes_state = "opened", objectAttributes_state_id = Just 1, objectAttributes_merge_status = "preparing", objectAttributes_target_project_id = 7926, objectAttributes_iid = 1, objectAttributes_description = "To test the merge request event.", objectAttributes_updated_by_id = Nothing, objectAttributes_merge_error = Nothing, objectAttributes_merge_params = Just (MergeParams {mergeParams_force_remove_source_branch = Just "1"}), objectAttributes_merge_when_pipeline_succeeds = Just False, objectAttributes_merge_user_id = Nothing, objectAttributes_merge_commit_sha = Nothing, objectAttributes_deleted_at = Nothing, objectAttributes_in_progress_merge_commit_sha = Nothing, objectAttributes_lock_version = Nothing, objectAttributes_time_estimate = Just 0, objectAttributes_last_edited_at = Nothing, objectAttributes_last_edited_by_id = Nothing, objectAttributes_head_pipeline_id = Nothing, objectAttributes_ref_fetched = Nothing, objectAttributes_merge_jid = Nothing, objectAttributes_source = ProjectEvent {projectEvent_id = Just 7926, projectEvent_name = "test-ci-project", projectEvent_description = Just "", projectEvent_web_url = "https://gitlab.example.com/joe/test-ci-project", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_git_http_url = "https://gitlab.example.com/joe/test-ci-project.git", projectEvent_namespace = "Joe Bloggs", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe/test-ci-project", projectEvent_default_branch = "master", projectEvent_homepage = Just "https://gitlab.example.com/joe/test-ci-project", projectEvent_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_ssh_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_http_url = "https://gitlab.example.com/joe/test-ci-project.git"}, objectAttributes_target = ProjectEvent {projectEvent_id = Just 7926, projectEvent_name = "test-ci-project", projectEvent_description = Just "", projectEvent_web_url = "https://gitlab.example.com/joe/test-ci-project", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_git_http_url = "https://gitlab.example.com/joe/test-ci-project.git", projectEvent_namespace = "Joe Bloggs", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe/test-ci-project", projectEvent_default_branch = "master", projectEvent_homepage = Just "https://gitlab.example.com/joe/test-ci-project", projectEvent_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_ssh_url = "git@gitlab.example.com:joe/test-ci-project.git", projectEvent_http_url = "https://gitlab.example.com/joe/test-ci-project.git"}, objectAttributes_last_commit = CommitEvent {commitEvent_id = "83c2d70f8ecb1376d1d4f1e52b7a18c560a7b95c", commitEvent_message = "A change\n", commitEvent_timestamp = "2022-10-24T23:10:03+01:00", commitEvent_url = "https://gitlab.example.com/joe/test-ci-project/-/commit/83c2d70f8ecb1376d1d4f1e52b7a18c560a7b95c", commitEvent_author = CommitAuthorEvent {commitAuthorEvent_name = "Joe Bloggs", commitAuthorEvent_email = "robstewart57@gmail.com"}}, objectAttributes_work_in_progress = False, objectAttributes_total_time_spent = Just 0, objectAttributes_human_total_time_spent = Nothing, objectAttributes_human_time_estimate = Nothing, objectAttributes_action = Just "open"}, mergeRequest_labels = Just [], mergeRequest_changes = MergeRequestChanges {mergeRequestChanges_author_id = Nothing, mergeRequestChanges_created_at = Nothing, mergeRequestChanges_description = Nothing, mergeRequestChanges_id = Nothing, mergeRequestChanges_iid = Nothing, mergeRequestChanges_source_branch = Nothing, mergeRequestChanges_source_project_id = Nothing, mergeRequestChanges_target_branch = Nothing, mergeRequestChanges_target_project_id = Nothing, mergeRequestChanges_title = Nothing, mergeRequestChanges_updated_at = Nothing}, mergeRequest_repository = RepositoryEvent {repositoryEvent_name = "test-ci-project", repositoryEvent_url = "git@gitlab.example.com:joe/test-ci-project.git", repositoryEvent_description = Just "", repositoryEvent_homepage = Just "https://gitlab.example.com/joe/test-ci-project", repositoryEvent_git_http_url = Nothing, repositoryEvent_git_ssh_url = Nothing, repositoryEvent_visibility_level = Nothing}}
 
 -- | tests that this fix works:
 -- https://gitlab.com/robstewart57/gitlab-haskell/-/commit/d1ca1037944616ac940284c5f8e49b5d9bcbf83c
 mergeRequestGitLab_15_5_0_maybe_descriptions_Haskell :: MergeRequestEvent
 mergeRequestGitLab_15_5_0_maybe_descriptions_Haskell =
-  MergeRequestEvent {mergeRequest_object_kind = "merge_request", mergeRequest_event_type = "merge_request", mergeRequest_user = UserEvent {userEvent_name = "Bloggs, Joe", userEvent_username = "joe123", userEvent_avatar_url = "https://secure.gravatar.com/avatar/df1b70b1fd7d7eaaa5f9a41f5f5093c0?s=80&d=identicon"}, mergeRequest_project = ProjectEvent {projectEvent_name = "proj1", projectEvent_description = Nothing, projectEvent_web_url = "https://gitlab.example.com/grp1/grp2/proj1", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@gitlab.example.com:grp1/grp2/proj1.git", projectEvent_git_http_url = "https://gitlab.example.com/grp1/grp2/proj1.git", projectEvent_namespace = "grp2", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "grp1/grp2/proj1", projectEvent_default_branch = "main", projectEvent_homepage = Just "https://gitlab.example.com/grp1/grp2/proj1", projectEvent_url = "git@gitlab.example.com:grp1/grp2/proj1.git", projectEvent_ssh_url = "git@gitlab.example.com:grp1/grp2/proj1.git", projectEvent_http_url = "https://gitlab.example.com/grp1/grp2/proj1.git"}, mergeRequest_object_attributes = ObjectAttributes {objectAttributes_id = 3461, objectAttributes_target_branch = "main", objectAttributes_source_branch = "main", objectAttributes_source_project_id = 49668, objectAttributes_author_id = Just 2312, objectAttributes_assignee_id = Nothing, objectAttributes_assignee_ids = Just [], objectAttributes_title = "the MR title", objectAttributes_created_at = "2022-10-25 18:51:48 UTC", objectAttributes_updated_at = "2022-10-25 18:51:48 UTC", objectAttributes_milestone_id = Nothing, objectAttributes_state = "opened", objectAttributes_state_id = Just 1, objectAttributes_merge_status = "preparing", objectAttributes_target_project_id = 43593, objectAttributes_iid = 14, objectAttributes_description = "", objectAttributes_updated_by_id = Nothing, objectAttributes_merge_error = Nothing, objectAttributes_merge_params = Just (MergeParams {mergeParams_force_remove_source_branch = Nothing}), objectAttributes_merge_when_pipeline_succeeds = Just False, objectAttributes_merge_user_id = Nothing, objectAttributes_merge_commit_sha = Nothing, objectAttributes_deleted_at = Nothing, objectAttributes_in_progress_merge_commit_sha = Nothing, objectAttributes_lock_version = Nothing, objectAttributes_time_estimate = Just 0, objectAttributes_last_edited_at = Nothing, objectAttributes_last_edited_by_id = Nothing, objectAttributes_head_pipeline_id = Nothing, objectAttributes_ref_fetched = Nothing, objectAttributes_merge_jid = Nothing, objectAttributes_source = ProjectEvent {projectEvent_name = "proj1", projectEvent_description = Nothing, projectEvent_web_url = "https://gitlab.example.com/joe123/proj1", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@gitlab.example.com:joe123/proj1.git", projectEvent_git_http_url = "https://gitlab.example.com/joe123/proj1.git", projectEvent_namespace = "Bloggs, Joe", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe123/proj1", projectEvent_default_branch = "main", projectEvent_homepage = Just "https://gitlab.example.com/joe123/proj1", projectEvent_url = "git@gitlab.example.com:joe123/proj1.git", projectEvent_ssh_url = "git@gitlab.example.com:joe123/proj1.git", projectEvent_http_url = "https://gitlab.example.com/joe123/proj1.git"}, objectAttributes_target = ProjectEvent {projectEvent_name = "proj1", projectEvent_description = Nothing, projectEvent_web_url = "https://gitlab.example.com/grp1/grp2/proj1", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@gitlab.example.com:grp1/grp2/proj1.git", projectEvent_git_http_url = "https://gitlab.example.com/grp1/grp2/proj1.git", projectEvent_namespace = "grp2", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "grp1/grp2/proj1", projectEvent_default_branch = "main", projectEvent_homepage = Just "https://gitlab.example.com/grp1/grp2/proj1", projectEvent_url = "git@gitlab.example.com:grp1/grp2/proj1.git", projectEvent_ssh_url = "git@gitlab.example.com:grp1/grp2/proj1.git", projectEvent_http_url = "https://gitlab.example.com/grp1/grp2/proj1.git"}, objectAttributes_last_commit = CommitEvent {commitEvent_id = "249d94fdc92825a2ca22c4fa74c511ec5f03e086", commitEvent_message = "Updated README\n", commitEvent_timestamp = "2022-10-08T10:37:28+01:00", commitEvent_url = "https://gitlab.example.com/grp1/grp2/proj1/-/commit/249d94fdc92825a2ca22c4fa74c511ec5f03e086", commitEvent_author = CommitAuthorEvent {commitAuthorEvent_name = "Hill, Harry", commitAuthorEvent_email = "harry@gmail.com"}}, objectAttributes_work_in_progress = True, objectAttributes_total_time_spent = Just 0, objectAttributes_human_total_time_spent = Nothing, objectAttributes_human_time_estimate = Nothing, objectAttributes_action = Just "open"}, mergeRequest_labels = Just [], mergeRequest_changes = MergeRequestChanges {mergeRequestChanges_author_id = Nothing, mergeRequestChanges_created_at = Nothing, mergeRequestChanges_description = Nothing, mergeRequestChanges_id = Nothing, mergeRequestChanges_iid = Nothing, mergeRequestChanges_source_branch = Nothing, mergeRequestChanges_source_project_id = Nothing, mergeRequestChanges_target_branch = Nothing, mergeRequestChanges_target_project_id = Nothing, mergeRequestChanges_title = Nothing, mergeRequestChanges_updated_at = Nothing}, mergeRequest_repository = RepositoryEvent {repositoryEvent_name = "proj1", repositoryEvent_url = "git@gitlab.example.com:grp1/grp2/proj1.git", repositoryEvent_description = Nothing, repositoryEvent_homepage = Just "https://gitlab.example.com/grp1/grp2/proj1", repositoryEvent_git_http_url = Nothing, repositoryEvent_git_ssh_url = Nothing, repositoryEvent_visibility_level = Nothing}}
+  MergeRequestEvent {mergeRequest_object_kind = "merge_request", mergeRequest_event_type = "merge_request", mergeRequest_user = UserEvent {userEvent_id = Nothing, userEvent_name = "Bloggs, Joe", userEvent_username = "joe123", userEvent_avatar_url = "https://secure.gravatar.com/avatar/df1b70b1fd7d7eaaa5f9a41f5f5093c0?s=80&d=identicon", userEvent_email = Nothing}, mergeRequest_project = ProjectEvent {projectEvent_id = Just 43593, projectEvent_name = "proj1", projectEvent_description = Nothing, projectEvent_web_url = "https://gitlab.example.com/grp1/grp2/proj1", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@gitlab.example.com:grp1/grp2/proj1.git", projectEvent_git_http_url = "https://gitlab.example.com/grp1/grp2/proj1.git", projectEvent_namespace = "grp2", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "grp1/grp2/proj1", projectEvent_default_branch = "main", projectEvent_homepage = Just "https://gitlab.example.com/grp1/grp2/proj1", projectEvent_url = "git@gitlab.example.com:grp1/grp2/proj1.git", projectEvent_ssh_url = "git@gitlab.example.com:grp1/grp2/proj1.git", projectEvent_http_url = "https://gitlab.example.com/grp1/grp2/proj1.git"}, mergeRequest_object_attributes = MergeRequestObjectAttributes {objectAttributes_id = 3461, objectAttributes_target_branch = "main", objectAttributes_source_branch = "main", objectAttributes_source_project_id = 49668, objectAttributes_author_id = Just 2312, objectAttributes_assignee_id = Nothing, objectAttributes_assignee_ids = Just [], objectAttributes_title = "the MR title", objectAttributes_created_at = "2022-10-25 18:51:48 UTC", objectAttributes_updated_at = "2022-10-25 18:51:48 UTC", objectAttributes_milestone_id = Nothing, objectAttributes_state = "opened", objectAttributes_state_id = Just 1, objectAttributes_merge_status = "preparing", objectAttributes_target_project_id = 43593, objectAttributes_iid = 14, objectAttributes_description = "", objectAttributes_updated_by_id = Nothing, objectAttributes_merge_error = Nothing, objectAttributes_merge_params = Just (MergeParams {mergeParams_force_remove_source_branch = Nothing}), objectAttributes_merge_when_pipeline_succeeds = Just False, objectAttributes_merge_user_id = Nothing, objectAttributes_merge_commit_sha = Nothing, objectAttributes_deleted_at = Nothing, objectAttributes_in_progress_merge_commit_sha = Nothing, objectAttributes_lock_version = Nothing, objectAttributes_time_estimate = Just 0, objectAttributes_last_edited_at = Nothing, objectAttributes_last_edited_by_id = Nothing, objectAttributes_head_pipeline_id = Nothing, objectAttributes_ref_fetched = Nothing, objectAttributes_merge_jid = Nothing, objectAttributes_source = ProjectEvent {projectEvent_id = Just 49668, projectEvent_name = "proj1", projectEvent_description = Nothing, projectEvent_web_url = "https://gitlab.example.com/joe123/proj1", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@gitlab.example.com:joe123/proj1.git", projectEvent_git_http_url = "https://gitlab.example.com/joe123/proj1.git", projectEvent_namespace = "Bloggs, Joe", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe123/proj1", projectEvent_default_branch = "main", projectEvent_homepage = Just "https://gitlab.example.com/joe123/proj1", projectEvent_url = "git@gitlab.example.com:joe123/proj1.git", projectEvent_ssh_url = "git@gitlab.example.com:joe123/proj1.git", projectEvent_http_url = "https://gitlab.example.com/joe123/proj1.git"}, objectAttributes_target = ProjectEvent {projectEvent_id = Just 43593, projectEvent_name = "proj1", projectEvent_description = Nothing, projectEvent_web_url = "https://gitlab.example.com/grp1/grp2/proj1", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@gitlab.example.com:grp1/grp2/proj1.git", projectEvent_git_http_url = "https://gitlab.example.com/grp1/grp2/proj1.git", projectEvent_namespace = "grp2", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "grp1/grp2/proj1", projectEvent_default_branch = "main", projectEvent_homepage = Just "https://gitlab.example.com/grp1/grp2/proj1", projectEvent_url = "git@gitlab.example.com:grp1/grp2/proj1.git", projectEvent_ssh_url = "git@gitlab.example.com:grp1/grp2/proj1.git", projectEvent_http_url = "https://gitlab.example.com/grp1/grp2/proj1.git"}, objectAttributes_last_commit = CommitEvent {commitEvent_id = "249d94fdc92825a2ca22c4fa74c511ec5f03e086", commitEvent_message = "Updated README\n", commitEvent_timestamp = "2022-10-08T10:37:28+01:00", commitEvent_url = "https://gitlab.example.com/grp1/grp2/proj1/-/commit/249d94fdc92825a2ca22c4fa74c511ec5f03e086", commitEvent_author = CommitAuthorEvent {commitAuthorEvent_name = "Hill, Harry", commitAuthorEvent_email = "harry@gmail.com"}}, objectAttributes_work_in_progress = True, objectAttributes_total_time_spent = Just 0, objectAttributes_human_total_time_spent = Nothing, objectAttributes_human_time_estimate = Nothing, objectAttributes_action = Just "open"}, mergeRequest_labels = Just [], mergeRequest_changes = MergeRequestChanges {mergeRequestChanges_author_id = Nothing, mergeRequestChanges_created_at = Nothing, mergeRequestChanges_description = Nothing, mergeRequestChanges_id = Nothing, mergeRequestChanges_iid = Nothing, mergeRequestChanges_source_branch = Nothing, mergeRequestChanges_source_project_id = Nothing, mergeRequestChanges_target_branch = Nothing, mergeRequestChanges_target_project_id = Nothing, mergeRequestChanges_title = Nothing, mergeRequestChanges_updated_at = Nothing}, mergeRequest_repository = RepositoryEvent {repositoryEvent_name = "proj1", repositoryEvent_url = "git@gitlab.example.com:grp1/grp2/proj1.git", repositoryEvent_description = Nothing, repositoryEvent_homepage = Just "https://gitlab.example.com/grp1/grp2/proj1", repositoryEvent_git_http_url = Nothing, repositoryEvent_git_ssh_url = Nothing, repositoryEvent_visibility_level = Nothing}}
+
+buildHaskell :: BuildEvent
+buildHaskell =
+  BuildEvent {build_event_object_kind = "build", build_event_ref = "master", build_event_tag = False, build_event_before_sha = "19d1543c2f5ea888e3c69019bd7e3daff228fcbc", build_event_sha = "12fc8bb3a8b3f52c5bffa020e6d362027c724359", build_event_retries_count = 0, build_event_build_event_id = 47423, build_event_build_event_name = "junit", build_event_build_event_stage = "test", build_event_build_event_status = "created", build_event_created_at = "2024-11-01 20:15:34 UTC", build_event_started_at = Nothing, build_event_finished_at = Nothing, build_event_duration = Nothing, build_event_queued_duration = Nothing, build_event_allow_failure = False, build_event_failure_reason = Just "unknown_failure", build_event_pipeline_id = 32611, build_event_runner = Nothing, build_event_project_id = 25039, build_event_project_name = "Joe / repo-name", build_event_user = User {user_id = 2682, user_username = "joe", user_bio = Nothing, user_two_factor_enabled = Nothing, user_last_sign_in_at = Nothing, user_current_sign_in_at = Nothing, user_last_activity_on = Nothing, user_skype = Nothing, user_twitter = Nothing, user_website_url = Nothing, user_theme_id = Nothing, user_color_scheme_id = Nothing, user_external = Nothing, user_private_profile = Nothing, user_projects_limit = Nothing, user_can_create_group = Nothing, user_can_create_project = Nothing, user_public_email = Nothing, user_organization = Nothing, user_job_title = Nothing, user_pronouns = Nothing, user_linkedin = Nothing, user_confirmed_at = Nothing, user_identities = Nothing, user_name = "Joe", user_email = Just "[REDACTED]", user_followers = Nothing, user_bot = Nothing, user_following = Nothing, user_state = Nothing, user_avatar_url = Just "https://secure.gravatar.com/avatar/abcde", user_web_url = Nothing, user_location = Nothing, user_extern_uid = Nothing, user_group_id_for_saml = Nothing, user_discussion_locked = Nothing, user_created_at = Nothing, user_note = Nothing, user_password = Nothing, user_force_random_password = Nothing, user_providor = Nothing, user_reset_password = Nothing, user_skip_confirmation = Nothing, user_view_diffs_file_by_file = Nothing}, build_event_commit = BuildCommit {build_commit_id = 32611, build_commit_name = Nothing, build_commit_sha = "12fc8bb3a8b3f52c5bffa020e6d362027c724359", build_commit_message = "the message", build_commit_author_name = "Joe", build_commit_author_email = "joe@gmail.com", build_commit_author_url = "mailto:joe@gmail.com", build_commit_status = "created", build_commit_duration = Nothing, build_commit_started_at = Nothing, build_commit_finished_at = Nothing}, build_event_repository = Repository {repository_id = Nothing, repository_name = "repo-name", repository_type = Nothing, repository_path = Nothing, repository_mode = Nothing}, build_event_project = BuildProject {build_project_project_id = 25039, build_project_project_name = "repo-name", build_project_description = Nothing, build_project_web_url = "https://example.com/joe/repo-name", build_project_avatar_url = Nothing, build_project_git_ssh_url = "git@example.com:joe/repo-name.git", build_project_git_http_url = "https://example.com/joe/repo-name.git", build_project_namespace = "Joe", build_project_visibility_level = 0, build_project_path_with_namespace = "joe/repo-name", build_project_default_branch = "master", build_project_ci_config_path = Nothing}, build_event_environment = Nothing}
+
+build2Haskell :: BuildEvent
+build2Haskell =
+  BuildEvent {build_event_object_kind = "build", build_event_ref = "master", build_event_tag = False, build_event_before_sha = "edcba", build_event_sha = "abcde", build_event_retries_count = 0, build_event_build_event_id = 47500, build_event_build_event_name = "junit", build_event_build_event_stage = "test", build_event_build_event_status = "failed", build_event_created_at = "2024-11-02 18:29:00 UTC", build_event_started_at = Just "2024-11-02 18:29:01 UTC", build_event_finished_at = Just "2024-11-02 18:29:06 UTC", build_event_duration = Just 4.543246, build_event_queued_duration = Just 1.08065, build_event_allow_failure = False, build_event_failure_reason = Just "script_failure", build_event_pipeline_id = 32685, build_event_runner = Just (Runner {runner_id = 17, runner_description = "", runner_runner_type = "instance_type", runner_active = True, runner_is_shared = True, runner_tags = []}), build_event_project_id = 25078, build_event_project_name = "joe/proj-name", build_event_user = User {user_id = 742, user_username = "jg2078", user_bio = Nothing, user_two_factor_enabled = Nothing, user_last_sign_in_at = Nothing, user_current_sign_in_at = Nothing, user_last_activity_on = Nothing, user_skype = Nothing, user_twitter = Nothing, user_website_url = Nothing, user_theme_id = Nothing, user_color_scheme_id = Nothing, user_external = Nothing, user_private_profile = Nothing, user_projects_limit = Nothing, user_can_create_group = Nothing, user_can_create_project = Nothing, user_public_email = Nothing, user_organization = Nothing, user_job_title = Nothing, user_pronouns = Nothing, user_linkedin = Nothing, user_confirmed_at = Nothing, user_identities = Nothing, user_name = "Goddard, Jamie", user_email = Just "[REDACTED]", user_followers = Nothing, user_bot = Nothing, user_following = Nothing, user_state = Nothing, user_avatar_url = Just "https://secure.gravatar.com/avatar/abc", user_web_url = Nothing, user_location = Nothing, user_extern_uid = Nothing, user_group_id_for_saml = Nothing, user_discussion_locked = Nothing, user_created_at = Nothing, user_note = Nothing, user_password = Nothing, user_force_random_password = Nothing, user_providor = Nothing, user_reset_password = Nothing, user_skip_confirmation = Nothing, user_view_diffs_file_by_file = Nothing}, build_event_commit = BuildCommit {build_commit_id = 32685, build_commit_name = Nothing, build_commit_sha = "abcde", build_commit_message = "message name", build_commit_author_name = "joe", build_commit_author_email = "joe@gmail.com", build_commit_author_url = "mailto:joe@gmail.com", build_commit_status = "failed", build_commit_duration = Just 4, build_commit_started_at = Just "2024-11-02 18:29:01 UTC", build_commit_finished_at = Just "2024-11-02 18:29:06 UTC"}, build_event_repository = Repository {repository_id = Nothing, repository_name = "proj-name", repository_type = Nothing, repository_path = Nothing, repository_mode = Nothing}, build_event_project = BuildProject {build_project_project_id = 25078, build_project_project_name = "proj-name", build_project_description = Nothing, build_project_web_url = "https://example.com/joe/proj-name", build_project_avatar_url = Nothing, build_project_git_ssh_url = "git@example.com:joe/proj-name.git", build_project_git_http_url = "https://example.com/joe/proj-name.git", build_project_namespace = "Joe", build_project_visibility_level = 0, build_project_path_with_namespace = "joe/proj-name", build_project_default_branch = "master", build_project_ci_config_path = Nothing}, build_event_environment = Nothing}
+
+pipelineHaskell :: PipelineEvent
+pipelineHaskell =
+  PipelineEvent {pipeline_event_object_kind = "pipeline", pipeline_event_object_attributes = PipelineObjectAttributes {pipeline_object_attributes_id = 32617, pipeline_object_attributes_iid = 4, pipeline_object_attributes_name = Nothing, pipeline_object_attributes_ref = "master", pipeline_object_attributes_tag = False, pipeline_object_attributes_sha = "abcde", pipeline_object_attributes_before_sha = "edcba", pipeline_object_attributes_source = "push", pipeline_object_attributes_status = "failed", pipeline_object_attributes_detailed_status = "failed", pipeline_object_attributes_stages = ["test"], pipeline_object_attributes_created_at = "2024-11-01 21:58:31 UTC", pipeline_object_attributes_finished_at = Just "2024-11-01 21:58:35 UTC", pipeline_object_attributes_duration = Just 3.0, pipeline_object_attributes_queued_duration = Nothing, pipeline_object_attributes_variables = [], pipeline_object_attributes_url = "https://example.com/joe/proj-name/-/pipelines/32617"}, pipeline_event_merge_request = Nothing, pipeline_event_user = User {user_id = 899, user_username = "joe", user_bio = Nothing, user_two_factor_enabled = Nothing, user_last_sign_in_at = Nothing, user_current_sign_in_at = Nothing, user_last_activity_on = Nothing, user_skype = Nothing, user_twitter = Nothing, user_website_url = Nothing, user_theme_id = Nothing, user_color_scheme_id = Nothing, user_external = Nothing, user_private_profile = Nothing, user_projects_limit = Nothing, user_can_create_group = Nothing, user_can_create_project = Nothing, user_public_email = Nothing, user_organization = Nothing, user_job_title = Nothing, user_pronouns = Nothing, user_linkedin = Nothing, user_confirmed_at = Nothing, user_identities = Nothing, user_name = "Joe", user_email = Just "[REDACTED]", user_followers = Nothing, user_bot = Nothing, user_following = Nothing, user_state = Nothing, user_avatar_url = Just "https://secure.gravatar.com/avatar/abc", user_web_url = Nothing, user_location = Nothing, user_extern_uid = Nothing, user_group_id_for_saml = Nothing, user_discussion_locked = Nothing, user_created_at = Nothing, user_note = Nothing, user_password = Nothing, user_force_random_password = Nothing, user_providor = Nothing, user_reset_password = Nothing, user_skip_confirmation = Nothing, user_view_diffs_file_by_file = Nothing}, pipeline_event_project = BuildProject {build_project_project_id = 24472, build_project_project_name = "proj-name", build_project_description = Nothing, build_project_web_url = "https://example.com/joe/proj-name", build_project_avatar_url = Nothing, build_project_git_ssh_url = "git@example.com:joe/proj-name.git", build_project_git_http_url = "https://example.com/joe/proj-name.git", build_project_namespace = "Joe", build_project_visibility_level = 0, build_project_path_with_namespace = "joe/proj-name", build_project_default_branch = "master", build_project_ci_config_path = Nothing}, pipeline_event_commit = CommitEvent {commitEvent_id = "abcde", commitEvent_message = "the commit message", commitEvent_timestamp = "2024-11-01T21:58:31+00:00", commitEvent_url = "https://example.com/joe/proj-name/-/commit/abcde", commitEvent_author = CommitAuthorEvent {commitAuthorEvent_name = "Joe", commitAuthorEvent_email = "12345+Joe@users.noreply.github.com"}}, pipeline_event_builds = [PipelineBuild {pipeline_build_id = 47429, pipeline_build_stage = "test", pipeline_build_name = "junit", pipeline_build_status = "failed", pipeline_build_created_at = "2024-11-01 21:58:31 UTC", pipeline_build_started_at = Just "2024-11-01 21:58:31 UTC", pipeline_build_finished_at = Just "2024-11-01 21:58:35 UTC", pipeline_build_duration = Just 3.889573, pipeline_build_queued_duration = 0.19131, pipeline_build_failure_reason = Just "script_failure", pipeline_build_when = "on_success", pipeline_build_manual = False, pipeline_build_allow_failure = False, pipeline_build_user = UserEvent {userEvent_id = Nothing, userEvent_name = "Joe", userEvent_username = "joe", userEvent_avatar_url = "https://secure.gravatar.com/avatar/abc", userEvent_email = Nothing}, pipeline_build_runner = Just (Runner {runner_id = 15, runner_description = "", runner_runner_type = "instance_type", runner_active = True, runner_is_shared = True, runner_tags = []}), pipeline_build_artifacts_file = ArtifactsFile {artifacts_file_filename = Nothing, artifacts_file_size = Nothing}, pipeline_build_environment = Nothing}]}
+
+pipeline2Haskell :: PipelineEvent
+pipeline2Haskell =
+  PipelineEvent {pipeline_event_object_kind = "pipeline", pipeline_event_object_attributes = PipelineObjectAttributes {pipeline_object_attributes_id = 32686, pipeline_object_attributes_iid = 2, pipeline_object_attributes_name = Nothing, pipeline_object_attributes_ref = "master", pipeline_object_attributes_tag = False, pipeline_object_attributes_sha = "abcde", pipeline_object_attributes_before_sha = "edcba", pipeline_object_attributes_source = "push", pipeline_object_attributes_status = "failed", pipeline_object_attributes_detailed_status = "failed", pipeline_object_attributes_stages = ["test"], pipeline_object_attributes_created_at = "2024-11-02 18:32:17 UTC", pipeline_object_attributes_finished_at = Just "2024-11-02 18:32:23 UTC", pipeline_object_attributes_duration = Just 4.0, pipeline_object_attributes_queued_duration = Just 1.0, pipeline_object_attributes_variables = [], pipeline_object_attributes_url = "https://example.com/joe/proj-name/-/pipelines/32686"}, pipeline_event_merge_request = Nothing, pipeline_event_user = User {user_id = 742, user_username = "joe", user_bio = Nothing, user_two_factor_enabled = Nothing, user_last_sign_in_at = Nothing, user_current_sign_in_at = Nothing, user_last_activity_on = Nothing, user_skype = Nothing, user_twitter = Nothing, user_website_url = Nothing, user_theme_id = Nothing, user_color_scheme_id = Nothing, user_external = Nothing, user_private_profile = Nothing, user_projects_limit = Nothing, user_can_create_group = Nothing, user_can_create_project = Nothing, user_public_email = Nothing, user_organization = Nothing, user_job_title = Nothing, user_pronouns = Nothing, user_linkedin = Nothing, user_confirmed_at = Nothing, user_identities = Nothing, user_name = "Joe", user_email = Just "[REDACTED]", user_followers = Nothing, user_bot = Nothing, user_following = Nothing, user_state = Nothing, user_avatar_url = Just "https://secure.gravatar.com/avatar/abc", user_web_url = Nothing, user_location = Nothing, user_extern_uid = Nothing, user_group_id_for_saml = Nothing, user_discussion_locked = Nothing, user_created_at = Nothing, user_note = Nothing, user_password = Nothing, user_force_random_password = Nothing, user_providor = Nothing, user_reset_password = Nothing, user_skip_confirmation = Nothing, user_view_diffs_file_by_file = Nothing}, pipeline_event_project = BuildProject {build_project_project_id = 25078, build_project_project_name = "proj-name", build_project_description = Nothing, build_project_web_url = "https://example.com/joe/proj-name", build_project_avatar_url = Nothing, build_project_git_ssh_url = "git@example.com:joe/proj-name.git", build_project_git_http_url = "https://example.com/joe/proj-name.git", build_project_namespace = "Joe", build_project_visibility_level = 0, build_project_path_with_namespace = "joe/proj-name", build_project_default_branch = "master", build_project_ci_config_path = Nothing}, pipeline_event_commit = CommitEvent {commitEvent_id = "abcde", commitEvent_message = "the commit message", commitEvent_timestamp = "2024-11-02T18:32:16+00:00", commitEvent_url = "https://example.com/joe/proj-name/-/commit/abcde", commitEvent_author = CommitAuthorEvent {commitAuthorEvent_name = "joe", commitAuthorEvent_email = "joe@gmail.com"}}, pipeline_event_builds = [PipelineBuild {pipeline_build_id = 47501, pipeline_build_stage = "test", pipeline_build_name = "junit", pipeline_build_status = "failed", pipeline_build_created_at = "2024-11-02 18:32:18 UTC", pipeline_build_started_at = Just "2024-11-02 18:32:18 UTC", pipeline_build_finished_at = Just "2024-11-02 18:32:23 UTC", pipeline_build_duration = Just 4.428372, pipeline_build_queued_duration = 0.561693, pipeline_build_failure_reason = Just "script_failure", pipeline_build_when = "on_success", pipeline_build_manual = False, pipeline_build_allow_failure = False, pipeline_build_user = UserEvent {userEvent_id = Nothing, userEvent_name = "Joe", userEvent_username = "joe", userEvent_avatar_url = "https://secure.gravatar.com/avatar/abc", userEvent_email = Nothing}, pipeline_build_runner = Just (Runner {runner_id = 15, runner_description = "", runner_runner_type = "instance_type", runner_active = True, runner_is_shared = True, runner_tags = []}), pipeline_build_artifacts_file = ArtifactsFile {artifacts_file_filename = Nothing, artifacts_file_size = Nothing}, pipeline_build_environment = Nothing}]}
+
+pipeline3Haskell :: PipelineEvent
+pipeline3Haskell =
+  PipelineEvent {pipeline_event_object_kind = "pipeline", pipeline_event_object_attributes = PipelineObjectAttributes {pipeline_object_attributes_id = 32701, pipeline_object_attributes_iid = 5, pipeline_object_attributes_name = Nothing, pipeline_object_attributes_ref = "master", pipeline_object_attributes_tag = False, pipeline_object_attributes_sha = "abcde", pipeline_object_attributes_before_sha = "edcba", pipeline_object_attributes_source = "push", pipeline_object_attributes_status = "failed", pipeline_object_attributes_detailed_status = "failed", pipeline_object_attributes_stages = ["test"], pipeline_object_attributes_created_at = "2024-11-02 19:31:48 UTC", pipeline_object_attributes_finished_at = Just "2024-11-02 19:31:53 UTC", pipeline_object_attributes_duration = Just 3.0, pipeline_object_attributes_queued_duration = Just 1.0, pipeline_object_attributes_variables = [], pipeline_object_attributes_url = "https://example.com/joe/proj-name/-/pipelines/32701"}, pipeline_event_merge_request = Nothing, pipeline_event_user = User {user_id = 3041, user_username = "joe", user_bio = Nothing, user_two_factor_enabled = Nothing, user_last_sign_in_at = Nothing, user_current_sign_in_at = Nothing, user_last_activity_on = Nothing, user_skype = Nothing, user_twitter = Nothing, user_website_url = Nothing, user_theme_id = Nothing, user_color_scheme_id = Nothing, user_external = Nothing, user_private_profile = Nothing, user_projects_limit = Nothing, user_can_create_group = Nothing, user_can_create_project = Nothing, user_public_email = Nothing, user_organization = Nothing, user_job_title = Nothing, user_pronouns = Nothing, user_linkedin = Nothing, user_confirmed_at = Nothing, user_identities = Nothing, user_name = "Joe", user_email = Just "[REDACTED]", user_followers = Nothing, user_bot = Nothing, user_following = Nothing, user_state = Nothing, user_avatar_url = Just "https://secure.gravatar.com/avatar/abc", user_web_url = Nothing, user_location = Nothing, user_extern_uid = Nothing, user_group_id_for_saml = Nothing, user_discussion_locked = Nothing, user_created_at = Nothing, user_note = Nothing, user_password = Nothing, user_force_random_password = Nothing, user_providor = Nothing, user_reset_password = Nothing, user_skip_confirmation = Nothing, user_view_diffs_file_by_file = Nothing}, pipeline_event_project = BuildProject {build_project_project_id = 25084, build_project_project_name = "proj-name", build_project_description = Just "", build_project_web_url = "https://example.com/joe/proj-name", build_project_avatar_url = Nothing, build_project_git_ssh_url = "git@example.com:joe/proj-name.git", build_project_git_http_url = "https://example.com/joe/proj-name.git", build_project_namespace = "Joe", build_project_visibility_level = 0, build_project_path_with_namespace = "joe/proj-name", build_project_default_branch = "master", build_project_ci_config_path = Nothing}, pipeline_event_commit = CommitEvent {commitEvent_id = "abcde", commitEvent_message = "the commit message", commitEvent_timestamp = "2024-11-02T19:31:48+00:00", commitEvent_url = "https://example.com/joe/proj-name/-/commit/abcde", commitEvent_author = CommitAuthorEvent {commitAuthorEvent_name = "Joe", commitAuthorEvent_email = "joe@gmail.com"}}, pipeline_event_builds = [PipelineBuild {pipeline_build_id = 47516, pipeline_build_stage = "test", pipeline_build_name = "junit", pipeline_build_status = "failed", pipeline_build_created_at = "2024-11-02 19:31:48 UTC", pipeline_build_started_at = Just "2024-11-02 19:31:50 UTC", pipeline_build_finished_at = Just "2024-11-02 19:31:53 UTC", pipeline_build_duration = Just 3.734497, pipeline_build_queued_duration = 0.672819, pipeline_build_failure_reason = Just "script_failure", pipeline_build_when = "on_success", pipeline_build_manual = False, pipeline_build_allow_failure = False, pipeline_build_user = UserEvent {userEvent_id = Nothing, userEvent_name = "Joe", userEvent_username = "joe", userEvent_avatar_url = "https://secure.gravatar.com/avatar/abc", userEvent_email = Nothing}, pipeline_build_runner = Just (Runner {runner_id = 14, runner_description = "", runner_runner_type = "instance_type", runner_active = True, runner_is_shared = True, runner_tags = []}), pipeline_build_artifacts_file = ArtifactsFile {artifacts_file_filename = Nothing, artifacts_file_size = Nothing}, pipeline_build_environment = Nothing}]}
+
+pipeline4Haskell :: PipelineEvent
+pipeline4Haskell =
+  PipelineEvent {pipeline_event_object_kind = "pipeline", pipeline_event_object_attributes = PipelineObjectAttributes {pipeline_object_attributes_id = 36096, pipeline_object_attributes_iid = 1, pipeline_object_attributes_name = Nothing, pipeline_object_attributes_ref = "master", pipeline_object_attributes_tag = False, pipeline_object_attributes_sha = "abcde", pipeline_object_attributes_before_sha = "edcba", pipeline_object_attributes_source = "push", pipeline_object_attributes_status = "pending", pipeline_object_attributes_detailed_status = "pending", pipeline_object_attributes_stages = ["test"], pipeline_object_attributes_created_at = "2024-11-08 21:26:15 UTC", pipeline_object_attributes_finished_at = Nothing, pipeline_object_attributes_duration = Nothing, pipeline_object_attributes_queued_duration = Nothing, pipeline_object_attributes_variables = [], pipeline_object_attributes_url = "https://example.com/joe/proj-name/-/pipelines/36096"}, pipeline_event_merge_request = Nothing, pipeline_event_user = User {user_id = 2659, user_username = "joe", user_bio = Nothing, user_two_factor_enabled = Nothing, user_last_sign_in_at = Nothing, user_current_sign_in_at = Nothing, user_last_activity_on = Nothing, user_skype = Nothing, user_twitter = Nothing, user_website_url = Nothing, user_theme_id = Nothing, user_color_scheme_id = Nothing, user_external = Nothing, user_private_profile = Nothing, user_projects_limit = Nothing, user_can_create_group = Nothing, user_can_create_project = Nothing, user_public_email = Nothing, user_organization = Nothing, user_job_title = Nothing, user_pronouns = Nothing, user_linkedin = Nothing, user_confirmed_at = Nothing, user_identities = Nothing, user_name = "Lad, Krishan", user_email = Just "[REDACTED]", user_followers = Nothing, user_bot = Nothing, user_following = Nothing, user_state = Nothing, user_avatar_url = Just "https://example.com/uploads/-/system/user/avatar/2659/avatar.png", user_web_url = Nothing, user_location = Nothing, user_extern_uid = Nothing, user_group_id_for_saml = Nothing, user_discussion_locked = Nothing, user_created_at = Nothing, user_note = Nothing, user_password = Nothing, user_force_random_password = Nothing, user_providor = Nothing, user_reset_password = Nothing, user_skip_confirmation = Nothing, user_view_diffs_file_by_file = Nothing}, pipeline_event_project = BuildProject {build_project_project_id = 25415, build_project_project_name = "F28SG - Lab 7", build_project_description = Nothing, build_project_web_url = "https://example.com/joe/proj-name", build_project_avatar_url = Nothing, build_project_git_ssh_url = "git@example.com:joe/proj-name.git", build_project_git_http_url = "https://example.com/joe/proj-name.git", build_project_namespace = "Joe", build_project_visibility_level = 0, build_project_path_with_namespace = "joe/proj-name", build_project_default_branch = "master", build_project_ci_config_path = Nothing}, pipeline_event_commit = CommitEvent {commitEvent_id = "abcde", commitEvent_message = "commit message", commitEvent_timestamp = "2024-11-08T21:26:13+00:00", commitEvent_url = "https://example.com/joe/proj-name/-/commit/abcde", commitEvent_author = CommitAuthorEvent {commitAuthorEvent_name = "Joe", commitAuthorEvent_email = "joe@gmail.com"}}, pipeline_event_builds = [PipelineBuild {pipeline_build_id = 51146, pipeline_build_stage = "test", pipeline_build_name = "junit", pipeline_build_status = "pending", pipeline_build_created_at = "2024-11-08 21:26:15 UTC", pipeline_build_started_at = Nothing, pipeline_build_finished_at = Nothing, pipeline_build_duration = Nothing, pipeline_build_queued_duration = 0.328087189, pipeline_build_failure_reason = Nothing, pipeline_build_when = "on_success", pipeline_build_manual = False, pipeline_build_allow_failure = False, pipeline_build_user = UserEvent {userEvent_id = Nothing, userEvent_name = "Joe", userEvent_username = "joe", userEvent_avatar_url = "https://example.com/uploads/-/system/user/avatar/2659/avatar.png", userEvent_email = Nothing}, pipeline_build_runner = Nothing, pipeline_build_artifacts_file = ArtifactsFile {artifacts_file_filename = Nothing, artifacts_file_size = Nothing}, pipeline_build_environment = Nothing}]}
+
+pipeline5Haskell :: PipelineEvent
+pipeline5Haskell =
+  PipelineEvent {pipeline_event_object_kind = "pipeline", pipeline_event_object_attributes = PipelineObjectAttributes {pipeline_object_attributes_id = 38727, pipeline_object_attributes_iid = 53, pipeline_object_attributes_name = Nothing, pipeline_object_attributes_ref = "master", pipeline_object_attributes_tag = False, pipeline_object_attributes_sha = "abcde", pipeline_object_attributes_before_sha = "edcba", pipeline_object_attributes_source = "push", pipeline_object_attributes_status = "success", pipeline_object_attributes_detailed_status = "passed", pipeline_object_attributes_stages = ["deploy"], pipeline_object_attributes_created_at = "2024-11-17 16:17:11 UTC", pipeline_object_attributes_finished_at = Just "2024-11-17 16:17:15 UTC", pipeline_object_attributes_duration = Just 2.0, pipeline_object_attributes_queued_duration = Just 1.0, pipeline_object_attributes_variables = [], pipeline_object_attributes_url = "https://example.com/group-name/proj-name/-/pipelines/38727"}, pipeline_event_merge_request = Nothing, pipeline_event_user = User {user_id = 2638, user_username = "joe", user_bio = Nothing, user_two_factor_enabled = Nothing, user_last_sign_in_at = Nothing, user_current_sign_in_at = Nothing, user_last_activity_on = Nothing, user_skype = Nothing, user_twitter = Nothing, user_website_url = Nothing, user_theme_id = Nothing, user_color_scheme_id = Nothing, user_external = Nothing, user_private_profile = Nothing, user_projects_limit = Nothing, user_can_create_group = Nothing, user_can_create_project = Nothing, user_public_email = Nothing, user_organization = Nothing, user_job_title = Nothing, user_pronouns = Nothing, user_linkedin = Nothing, user_confirmed_at = Nothing, user_identities = Nothing, user_name = "Joe Bloggs", user_email = Just "[REDACTED]", user_followers = Nothing, user_bot = Nothing, user_following = Nothing, user_state = Nothing, user_avatar_url = Just "https://secure.gravatar.com/avatar/abc", user_web_url = Nothing, user_location = Nothing, user_extern_uid = Nothing, user_group_id_for_saml = Nothing, user_discussion_locked = Nothing, user_created_at = Nothing, user_note = Nothing, user_password = Nothing, user_force_random_password = Nothing, user_providor = Nothing, user_reset_password = Nothing, user_skip_confirmation = Nothing, user_view_diffs_file_by_file = Nothing}, pipeline_event_project = BuildProject {build_project_project_id = 20385, build_project_project_name = "Cinema Website", build_project_description = Nothing, build_project_web_url = "https://example.com/group-name/proj-name", build_project_avatar_url = Nothing, build_project_git_ssh_url = "git@example.com:group-name/proj-name.git", build_project_git_http_url = "https://example.com/group-name/proj-name.git", build_project_namespace = "Group name", build_project_visibility_level = 0, build_project_path_with_namespace = "group-name/proj-name", build_project_default_branch = "master", build_project_ci_config_path = Nothing}, pipeline_event_commit = CommitEvent {commitEvent_id = "abcde", commitEvent_message = "the message", commitEvent_timestamp = "2024-11-17T16:17:13+00:00", commitEvent_url = "https://example.com/group-name/proj-name/-/commit/abcde", commitEvent_author = CommitAuthorEvent {commitAuthorEvent_name = "Joe", commitAuthorEvent_email = "joe@gmail.com"}}, pipeline_event_builds = [PipelineBuild {pipeline_build_id = 54510, pipeline_build_stage = "deploy", pipeline_build_name = "pages", pipeline_build_status = "success", pipeline_build_created_at = "2024-11-17 16:17:11 UTC", pipeline_build_started_at = Just "2024-11-17 16:17:12 UTC", pipeline_build_finished_at = Just "2024-11-17 16:17:15 UTC", pipeline_build_duration = Just 2.767007, pipeline_build_queued_duration = 0.868802, pipeline_build_failure_reason = Nothing, pipeline_build_when = "on_success", pipeline_build_manual = False, pipeline_build_allow_failure = False, pipeline_build_user = UserEvent {userEvent_id = Nothing, userEvent_name = "Joe Bloggs", userEvent_username = "joe", userEvent_avatar_url = "https://secure.gravatar.com/avatar/abc", userEvent_email = Nothing}, pipeline_build_runner = Just (Runner {runner_id = 15, runner_description = "", runner_runner_type = "instance_type", runner_active = True, runner_is_shared = True, runner_tags = []}), pipeline_build_artifacts_file = ArtifactsFile {artifacts_file_filename = Just "artifacts.zip", artifacts_file_size = Just 8136559}, pipeline_build_environment = Nothing}]}
+
+issue1Haskell :: IssueEvent
+issue1Haskell =
+  IssueEvent {issue_event_event_type = "issue", issue_event_user = Just (UserEvent {userEvent_id = Nothing, userEvent_name = "Joe", userEvent_username = "ma2305", userEvent_avatar_url = "https://secure.gravatar.com/avatar/abcde", userEvent_email = Nothing}), issue_event_project = Just (ProjectEvent {projectEvent_id = Just 19102, projectEvent_name = "proj-name", projectEvent_description = Just "", projectEvent_web_url = "https://example.com/joe123/proj-name", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:joe123/proj-name.git", projectEvent_git_http_url = "https://example.com/joe123/proj-name.git", projectEvent_namespace = "Joe", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe123/proj-name", projectEvent_default_branch = "master", projectEvent_homepage = Just "https://example.com/joe123/proj-name", projectEvent_url = "git@example.com:joe123/proj-name.git", projectEvent_ssh_url = "git@example.com:joe123/proj-name.git", projectEvent_http_url = "https://example.com/joe123/proj-name.git"}), issue_event_object_attributes = Just (IssueEventObjectAttributes {issue_event_object_attributes_author_id = 2052, issue_event_object_attributes_closed_at = Just "2024-11-02 19:47:16 UTC", issue_event_object_attributes_confidential = False, issue_event_object_attributes_created_at = "2024-11-02 05:45:09 UTC", issue_event_object_attributes_description = Just "", issue_event_object_attributes_discussion_locked = Nothing, issue_event_object_attributes_due_date = Nothing, issue_event_object_attributes_id = 2183, issue_event_object_attributes_iid = 40, issue_event_object_attributes_last_edited_at = Nothing, issue_event_object_attributes_last_edited_by_id = Nothing, issue_event_object_attributes_milestone_id = Nothing, issue_event_object_attributes_move_to_id = Nothing, issue_event_object_attributes_duplicated_to_id = Nothing, issue_event_object_attributes_project_id = 19102, issue_event_object_attributes_relative_position = Just 20520, issue_event_object_attributes_state_id = 2, issue_event_object_attributes_time_estimate = 0, issue_event_object_attributes_title = "Issue title", issue_event_object_attributes_updated_at = "2024-11-02 19:47:17 UTC", issue_event_object_attributes_updated_by_id = Nothing, issue_event_object_attributes_type = "Issue", issue_event_object_attributes_url = "https://example.com/joe123/proj-name/-/issues/40", issue_event_object_attributes_total_time_spent = 0, issue_event_object_attributes_time_change = 0, issue_event_object_attributes_human_total_time_spent = Nothing, issue_event_object_attributes_human_time_change = Nothing, issue_event_object_attributes_human_time_estimate = Nothing}), issue_event_labels = Just [Label {label_id = Just 385, label_title = Just "Stage 3", label_color = Just "#cd5b45", label_project_id = Just 19102, label_created_at = Just "2024-11-02 05:42:30 UTC", label_updated_at = Just "2024-11-02 05:42:30 UTC", label_template = Just False, label_description = Nothing, label_type = Just "ProjectLabel", label_group_id = Nothing}], issue_event_changes = Just (IssueEventChanges {issue_event_changes_author_id = Nothing, issue_event_changes_created_at = Nothing, issue_event_changes_description = Nothing, issue_event_changes_id = Nothing, issue_event_changes_iid = Nothing, issue_event_changes_project_id = Nothing, issue_event_changes_title = Nothing, issue_event_changes_closed_at = Just (IssueChangesClosedAt {issue_event_closed_at_previous = Nothing, issue_event_closed_at_current = Just "2024-11-02 19:47:16 UTC"}), issue_event_changes_state_id = Just (IssueChangesStateId {issue_event_state_id_previous = Just 1, issue_event_state_id_current = 2}), issue_event_changes_updated_at = Just (IssueChangesUpdatedAt {issue_event_updated_at_previous = Just "2024-11-02 05:45:09 UTC", issue_event_updated_at_current = "2024-11-02 19:47:17 UTC"})}), issue_event_repository = Just (RepositoryEvent {repositoryEvent_name = "proj-name", repositoryEvent_url = "git@example.com:joe123/proj-name.git", repositoryEvent_description = Just "", repositoryEvent_homepage = Just "https://example.com/joe123/proj-name", repositoryEvent_git_http_url = Nothing, repositoryEvent_git_ssh_url = Nothing, repositoryEvent_visibility_level = Nothing}), issue_event_assignees = Just [UserEvent {userEvent_id = Nothing, userEvent_name = "Joe", userEvent_username = "joe123", userEvent_avatar_url = "https://secure.gravatar.com/avatar/abcde", userEvent_email = Nothing}]}
+
+issue2Haskell :: IssueEvent
+issue2Haskell =
+  IssueEvent {issue_event_event_type = "issue", issue_event_user = Just (UserEvent {userEvent_id = Nothing, userEvent_name = "Joe", userEvent_username = "joe", userEvent_avatar_url = "https://secure.gravatar.com/avatar/abc", userEvent_email = Nothing}), issue_event_project = Just (ProjectEvent {projectEvent_id = Just 20125, projectEvent_name = "proj-name", projectEvent_description = Just "the description", projectEvent_web_url = "https://example.com/joe/proj-name", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:joe/proj-name.git", projectEvent_git_http_url = "https://example.com/joe/proj-name.git", projectEvent_namespace = "Joe", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe/proj-name", projectEvent_default_branch = "master", projectEvent_homepage = Just "https://example.com/joe/proj-name", projectEvent_url = "git@example.com:joe/proj-name.git", projectEvent_ssh_url = "git@example.com:joe/proj-name.git", projectEvent_http_url = "https://example.com/joe/proj-name.git"}), issue_event_object_attributes = Just (IssueEventObjectAttributes {issue_event_object_attributes_author_id = 2617, issue_event_object_attributes_closed_at = Nothing, issue_event_object_attributes_confidential = False, issue_event_object_attributes_created_at = "2024-11-09 00:44:06 UTC", issue_event_object_attributes_description = Just "issue description", issue_event_object_attributes_discussion_locked = Nothing, issue_event_object_attributes_due_date = Nothing, issue_event_object_attributes_id = 2286, issue_event_object_attributes_iid = 25, issue_event_object_attributes_last_edited_at = Nothing, issue_event_object_attributes_last_edited_by_id = Nothing, issue_event_object_attributes_milestone_id = Nothing, issue_event_object_attributes_move_to_id = Nothing, issue_event_object_attributes_duplicated_to_id = Nothing, issue_event_object_attributes_project_id = 20125, issue_event_object_attributes_relative_position = Nothing, issue_event_object_attributes_state_id = 1, issue_event_object_attributes_time_estimate = 0, issue_event_object_attributes_title = "Class Diagram - stage 3", issue_event_object_attributes_updated_at = "2024-11-09 00:44:06 UTC", issue_event_object_attributes_updated_by_id = Nothing, issue_event_object_attributes_type = "Issue", issue_event_object_attributes_url = "https://example.com/joe/proj-name/-/issues/25", issue_event_object_attributes_total_time_spent = 0, issue_event_object_attributes_time_change = 0, issue_event_object_attributes_human_total_time_spent = Nothing, issue_event_object_attributes_human_time_change = Nothing, issue_event_object_attributes_human_time_estimate = Nothing}), issue_event_labels = Just [Label {label_id = Just 380, label_title = Just "the label title", label_color = Just "#9400d3", label_project_id = Just 20125, label_created_at = Just "2024-10-30 16:25:49 UTC", label_updated_at = Just "2024-10-30 16:25:49 UTC", label_template = Just False, label_description = Nothing, label_type = Just "ProjectLabel", label_group_id = Nothing}], issue_event_changes = Just (IssueEventChanges {issue_event_changes_author_id = Just (IssueChangesAuthorId {issue_event_author_id_previous = Nothing, issue_event_author_id_current = 2617}), issue_event_changes_created_at = Just (IssueChangesCreatedAt {issue_event_created_at_previous = Nothing, issue_event_created_at_current = "2024-11-09 00:44:06 UTC"}), issue_event_changes_description = Just (IssueChangesDescription {issue_event_description_previous = Nothing, issue_event_description_current = "issue description"}), issue_event_changes_id = Just (IssueChangesId {issue_event_id_previous = Nothing, issue_event_id_current = 2286}), issue_event_changes_iid = Just (IssueChangesIid {issue_event_iid_previous = Nothing, issue_event_iid_current = 25}), issue_event_changes_project_id = Just (IssueChangesProjectId {issue_event_project_id_previous = Nothing, issue_event_project_id_current = 20125}), issue_event_changes_title = Just (IssueChangesTitle {issue_event_title_previous = Nothing, issue_event_title_current = "new issue title"}), issue_event_changes_closed_at = Nothing, issue_event_changes_state_id = Nothing, issue_event_changes_updated_at = Just (IssueChangesUpdatedAt {issue_event_updated_at_previous = Nothing, issue_event_updated_at_current = "2024-11-09 00:44:06 UTC"})}), issue_event_repository = Just (RepositoryEvent {repositoryEvent_name = "proj-name", repositoryEvent_url = "git@example.com:joe/proj-name.git", repositoryEvent_description = Just "the description", repositoryEvent_homepage = Just "https://example.com/joe/proj-name", repositoryEvent_git_http_url = Nothing, repositoryEvent_git_ssh_url = Nothing, repositoryEvent_visibility_level = Nothing}), issue_event_assignees = Just [UserEvent {userEvent_id = Nothing, userEvent_name = "Joe", userEvent_username = "joe", userEvent_avatar_url = "https://secure.gravatar.com/avatar/abc", userEvent_email = Nothing}]}
+
+issue3Haskell :: IssueEvent
+issue3Haskell =
+  IssueEvent {issue_event_event_type = "issue", issue_event_user = Just (UserEvent {userEvent_id = Nothing, userEvent_name = "Joe", userEvent_username = "hr3000", userEvent_avatar_url = "https://secure.gravatar.com/avatar/abc", userEvent_email = Nothing}), issue_event_project = Just (ProjectEvent {projectEvent_id = Just 20064, projectEvent_name = "proj-name", projectEvent_description = Just "", projectEvent_web_url = "https://example.com/joe/proj-name", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:joe/proj-name.git", projectEvent_git_http_url = "https://example.com/joe/proj-name.git", projectEvent_namespace = "Joe", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe/proj-name", projectEvent_default_branch = "master", projectEvent_homepage = Just "https://example.com/joe/proj-name", projectEvent_url = "git@example.com:joe/proj-name.git", projectEvent_ssh_url = "git@example.com:joe/proj-name.git", projectEvent_http_url = "https://example.com/joe/proj-name.git"}), issue_event_object_attributes = Just (IssueEventObjectAttributes {issue_event_object_attributes_author_id = 2947, issue_event_object_attributes_closed_at = Nothing, issue_event_object_attributes_confidential = False, issue_event_object_attributes_created_at = "2024-11-22 21:57:16 UTC", issue_event_object_attributes_description = Just "The issue description", issue_event_object_attributes_discussion_locked = Nothing, issue_event_object_attributes_due_date = Just "2024-11-27", issue_event_object_attributes_id = 2982, issue_event_object_attributes_iid = 14, issue_event_object_attributes_last_edited_at = Nothing, issue_event_object_attributes_last_edited_by_id = Nothing, issue_event_object_attributes_milestone_id = Just 61, issue_event_object_attributes_move_to_id = Nothing, issue_event_object_attributes_duplicated_to_id = Nothing, issue_event_object_attributes_project_id = 20064, issue_event_object_attributes_relative_position = Just 7182, issue_event_object_attributes_state_id = 1, issue_event_object_attributes_time_estimate = 0, issue_event_object_attributes_title = "The issue description", issue_event_object_attributes_updated_at = "2024-11-22 21:57:31 UTC", issue_event_object_attributes_updated_by_id = Just 2947, issue_event_object_attributes_type = "Issue", issue_event_object_attributes_url = "https://example.com/joe/proj-name/-/issues/14", issue_event_object_attributes_total_time_spent = 0, issue_event_object_attributes_time_change = 0, issue_event_object_attributes_human_total_time_spent = Nothing, issue_event_object_attributes_human_time_change = Nothing, issue_event_object_attributes_human_time_estimate = Nothing}), issue_event_labels = Just [Label {label_id = Just 358, label_title = Just "joeProj-Name", label_color = Just "#6699cc", label_project_id = Just 20064, label_created_at = Just "2024-10-12 07:51:53 UTC", label_updated_at = Just "2024-10-12 07:51:53 UTC", label_template = Just False, label_description = Nothing, label_type = Just "ProjectLabel", label_group_id = Nothing}], issue_event_changes = Just (IssueEventChanges {issue_event_changes_author_id = Nothing, issue_event_changes_created_at = Nothing, issue_event_changes_description = Nothing, issue_event_changes_id = Nothing, issue_event_changes_iid = Nothing, issue_event_changes_project_id = Nothing, issue_event_changes_title = Nothing, issue_event_changes_closed_at = Just (IssueChangesClosedAt {issue_event_closed_at_previous = Just "2024-11-22 21:57:30 UTC", issue_event_closed_at_current = Nothing}), issue_event_changes_state_id = Just (IssueChangesStateId {issue_event_state_id_previous = Just 2, issue_event_state_id_current = 1}), issue_event_changes_updated_at = Just (IssueChangesUpdatedAt {issue_event_updated_at_previous = Just "2024-11-22 21:57:30 UTC", issue_event_updated_at_current = "2024-11-22 21:57:31 UTC"})}), issue_event_repository = Just (RepositoryEvent {repositoryEvent_name = "proj-name", repositoryEvent_url = "git@example.com:joe/proj-name.git", repositoryEvent_description = Just "", repositoryEvent_homepage = Just "https://example.com/joe/proj-name", repositoryEvent_git_http_url = Nothing, repositoryEvent_git_ssh_url = Nothing, repositoryEvent_visibility_level = Nothing}), issue_event_assignees = Just [UserEvent {userEvent_id = Nothing, userEvent_name = "Joe", userEvent_username = "joe", userEvent_avatar_url = "https://secure.gravatar.com/avatar/abc", userEvent_email = Nothing}]}
+
+issue4Haskell :: IssueEvent
+issue4Haskell =
+  IssueEvent {issue_event_event_type = "issue", issue_event_user = Just (UserEvent {userEvent_id = Nothing, userEvent_name = "Joe", userEvent_username = "kmsr2000", userEvent_avatar_url = "https://secure.gravatar.com/avatar/abc", userEvent_email = Nothing}), issue_event_project = Just (ProjectEvent {projectEvent_id = Just 19127, projectEvent_name = "proj-name", projectEvent_description = Just "", projectEvent_web_url = "https://example.com/joe/proj-name", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:joe/proj-name.git", projectEvent_git_http_url = "https://example.com/joe/proj-name.git", projectEvent_namespace = "Joe", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe/proj-name", projectEvent_default_branch = "master", projectEvent_homepage = Just "https://example.com/joe/proj-name", projectEvent_url = "git@example.com:joe/proj-name.git", projectEvent_ssh_url = "git@example.com:joe/proj-name.git", projectEvent_http_url = "https://example.com/joe/proj-name.git"}), issue_event_object_attributes = Just (IssueEventObjectAttributes {issue_event_object_attributes_author_id = 1853, issue_event_object_attributes_closed_at = Nothing, issue_event_object_attributes_confidential = False, issue_event_object_attributes_created_at = "2024-11-11 14:24:04 UTC", issue_event_object_attributes_description = Nothing, issue_event_object_attributes_discussion_locked = Nothing, issue_event_object_attributes_due_date = Nothing, issue_event_object_attributes_id = 2451, issue_event_object_attributes_iid = 78, issue_event_object_attributes_last_edited_at = Nothing, issue_event_object_attributes_last_edited_by_id = Nothing, issue_event_object_attributes_milestone_id = Just 63, issue_event_object_attributes_move_to_id = Nothing, issue_event_object_attributes_duplicated_to_id = Nothing, issue_event_object_attributes_project_id = 19127, issue_event_object_attributes_relative_position = Just 40014, issue_event_object_attributes_state_id = 1, issue_event_object_attributes_time_estimate = 0, issue_event_object_attributes_title = "The issue description", issue_event_object_attributes_updated_at = "2024-11-23 14:04:30 UTC", issue_event_object_attributes_updated_by_id = Just 1853, issue_event_object_attributes_type = "Task", issue_event_object_attributes_url = "https://example.com/joe/proj-name/-/work_items/78", issue_event_object_attributes_total_time_spent = 0, issue_event_object_attributes_time_change = 0, issue_event_object_attributes_human_total_time_spent = Nothing, issue_event_object_attributes_human_time_change = Nothing, issue_event_object_attributes_human_time_estimate = Nothing}), issue_event_labels = Just [Label {label_id = Just 391, label_title = Just "Stage 6", label_color = Just "#330066", label_project_id = Just 19127, label_created_at = Just "2024-11-11 13:54:59 UTC", label_updated_at = Just "2024-11-14 09:04:36 UTC", label_template = Just False, label_description = Just "", label_type = Just "ProjectLabel", label_group_id = Nothing}, Label {label_id = Just 337, label_title = Just "documentation", label_color = Just "#f0ad4e", label_project_id = Just 19127, label_created_at = Just "2024-10-07 07:46:00 UTC", label_updated_at = Just "2024-10-07 07:46:00 UTC", label_template = Just False, label_description = Nothing, label_type = Just "ProjectLabel", label_group_id = Nothing}], issue_event_changes = Just (IssueEventChanges {issue_event_changes_author_id = Nothing, issue_event_changes_created_at = Nothing, issue_event_changes_description = Nothing, issue_event_changes_id = Nothing, issue_event_changes_iid = Nothing, issue_event_changes_project_id = Nothing, issue_event_changes_title = Nothing, issue_event_changes_closed_at = Just (IssueChangesClosedAt {issue_event_closed_at_previous = Just "2024-11-21 15:11:56 UTC", issue_event_closed_at_current = Nothing}), issue_event_changes_state_id = Just (IssueChangesStateId {issue_event_state_id_previous = Just 2, issue_event_state_id_current = 1}), issue_event_changes_updated_at = Just (IssueChangesUpdatedAt {issue_event_updated_at_previous = Just "2024-11-21 15:11:56 UTC", issue_event_updated_at_current = "2024-11-23 14:04:30 UTC"})}), issue_event_repository = Just (RepositoryEvent {repositoryEvent_name = "proj-name", repositoryEvent_url = "git@example.com:joe/proj-name.git", repositoryEvent_description = Just "", repositoryEvent_homepage = Just "https://example.com/joe/proj-name", repositoryEvent_git_http_url = Nothing, repositoryEvent_git_ssh_url = Nothing, repositoryEvent_visibility_level = Nothing}), issue_event_assignees = Just [UserEvent {userEvent_id = Nothing, userEvent_name = "Joe", userEvent_username = "joe", userEvent_avatar_url = "https://secure.gravatar.com/avatar/abc", userEvent_email = Nothing}]}
+
+note1Haskell :: NoteEvent
+note1Haskell =
+  NoteEvent {note_event_object_kind = "note", note_event_event_type = "note", note_event_user = User {user_id = 2950, user_username = "joe", user_bio = Nothing, user_two_factor_enabled = Nothing, user_last_sign_in_at = Nothing, user_current_sign_in_at = Nothing, user_last_activity_on = Nothing, user_skype = Nothing, user_twitter = Nothing, user_website_url = Nothing, user_theme_id = Nothing, user_color_scheme_id = Nothing, user_external = Nothing, user_private_profile = Nothing, user_projects_limit = Nothing, user_can_create_group = Nothing, user_can_create_project = Nothing, user_public_email = Nothing, user_organization = Nothing, user_job_title = Nothing, user_pronouns = Nothing, user_linkedin = Nothing, user_confirmed_at = Nothing, user_identities = Nothing, user_name = "Joe", user_email = Just "[REDACTED]", user_followers = Nothing, user_bot = Nothing, user_following = Nothing, user_state = Nothing, user_avatar_url = Just "https://secure.gravatar.com/avatar/abc", user_web_url = Nothing, user_location = Nothing, user_extern_uid = Nothing, user_group_id_for_saml = Nothing, user_discussion_locked = Nothing, user_created_at = Nothing, user_note = Nothing, user_password = Nothing, user_force_random_password = Nothing, user_providor = Nothing, user_reset_password = Nothing, user_skip_confirmation = Nothing, user_view_diffs_file_by_file = Nothing}, note_event_project_id = 21219, note_event_project = ProjectEvent {projectEvent_id = Just 21219, projectEvent_name = "proj-name", projectEvent_description = Just "", projectEvent_web_url = "https://example.com/joe/proj-name", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:joe/proj-name.git", projectEvent_git_http_url = "https://example.com/joe/proj-name.git", projectEvent_namespace = "Joe", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe/proj-name", projectEvent_default_branch = "master", projectEvent_homepage = Just "https://example.com/joe/proj-name", projectEvent_url = "git@example.com:joe/proj-name.git", projectEvent_ssh_url = "git@example.com:joe/proj-name.git", projectEvent_http_url = "https://example.com/joe/proj-name.git"}, note_event_object_attributes = NoteObjectAttributes {note_object_attributes_attachment = Nothing, note_object_attributes_author_id = 2950, note_object_attributes_change_position = Nothing, note_object_attributes_commit_id = Nothing, note_object_attributes_created_at = "2024-11-16 16:16:10 UTC", note_object_attributes_discussion_id = "4f0df21318e0110d71de2114a6c34385bd81b713", note_object_attributes_id = 16684, note_object_attributes_line_code = Nothing, note_object_attributes_note = "the note text", note_object_attributes_noteable_id = Just 2797, note_object_attributes_noteable_type = "Issue", note_object_attributes_original_position = Nothing, note_object_attributes_position = Nothing, note_object_attributes_project_id = 21219, note_object_attributes_resolved_at = Nothing, note_object_attributes_resolved_by_id = Nothing, note_object_attributes_resolved_by_push = Nothing, note_object_attributes_st_diff = Nothing, note_object_attributes_system = False, note_object_attributes_type = Nothing, note_object_attributes_updated_at = Just "2024-11-16 16:16:10 UTC", note_object_attributes_updated_by_id = Nothing, note_object_attributes_description = "the note text", note_object_attributes_url = "https://example.com/joe/proj-name/-/issues/19#note_16684", note_object_attributes_action = "create"}, note_event_repository = RepositoryEvent {repositoryEvent_name = "proj-name", repositoryEvent_url = "git@example.com:joe/proj-name.git", repositoryEvent_description = Just "", repositoryEvent_homepage = Just "https://example.com/joe/proj-name", repositoryEvent_git_http_url = Nothing, repositoryEvent_git_ssh_url = Nothing, repositoryEvent_visibility_level = Nothing}, note_event_issue = Just (IssueEventObjectAttributes {issue_event_object_attributes_author_id = 2950, issue_event_object_attributes_closed_at = Nothing, issue_event_object_attributes_confidential = False, issue_event_object_attributes_created_at = "2024-11-16 12:47:16 UTC", issue_event_object_attributes_description = Just "", issue_event_object_attributes_discussion_locked = Nothing, issue_event_object_attributes_due_date = Nothing, issue_event_object_attributes_id = 2797, issue_event_object_attributes_iid = 19, issue_event_object_attributes_last_edited_at = Nothing, issue_event_object_attributes_last_edited_by_id = Nothing, issue_event_object_attributes_milestone_id = Nothing, issue_event_object_attributes_move_to_id = Nothing, issue_event_object_attributes_duplicated_to_id = Nothing, issue_event_object_attributes_project_id = 21219, issue_event_object_attributes_relative_position = Just 9747, issue_event_object_attributes_state_id = 1, issue_event_object_attributes_time_estimate = 0, issue_event_object_attributes_title = "the issue title", issue_event_object_attributes_updated_at = "2024-11-16 16:16:10 UTC", issue_event_object_attributes_updated_by_id = Just 2950, issue_event_object_attributes_type = "Issue", issue_event_object_attributes_url = "https://example.com/joe/proj-name/-/issues/19", issue_event_object_attributes_total_time_spent = 0, issue_event_object_attributes_time_change = 0, issue_event_object_attributes_human_total_time_spent = Nothing, issue_event_object_attributes_human_time_change = Nothing, issue_event_object_attributes_human_time_estimate = Nothing})}
+
+note2Haskell :: NoteEvent
+note2Haskell =
+  NoteEvent {note_event_object_kind = "note", note_event_event_type = "note", note_event_user = User {user_id = 2477, user_username = "joe", user_bio = Nothing, user_two_factor_enabled = Nothing, user_last_sign_in_at = Nothing, user_current_sign_in_at = Nothing, user_last_activity_on = Nothing, user_skype = Nothing, user_twitter = Nothing, user_website_url = Nothing, user_theme_id = Nothing, user_color_scheme_id = Nothing, user_external = Nothing, user_private_profile = Nothing, user_projects_limit = Nothing, user_can_create_group = Nothing, user_can_create_project = Nothing, user_public_email = Nothing, user_organization = Nothing, user_job_title = Nothing, user_pronouns = Nothing, user_linkedin = Nothing, user_confirmed_at = Nothing, user_identities = Nothing, user_name = "Joe", user_email = Just "[REDACTED]", user_followers = Nothing, user_bot = Nothing, user_following = Nothing, user_state = Nothing, user_avatar_url = Just "https://example.com/uploads/-/system/user/avatar/2477/avatar.png", user_web_url = Nothing, user_location = Nothing, user_extern_uid = Nothing, user_group_id_for_saml = Nothing, user_discussion_locked = Nothing, user_created_at = Nothing, user_note = Nothing, user_password = Nothing, user_force_random_password = Nothing, user_providor = Nothing, user_reset_password = Nothing, user_skip_confirmation = Nothing, user_view_diffs_file_by_file = Nothing}, note_event_project_id = 19102, note_event_project = ProjectEvent {projectEvent_id = Just 19102, projectEvent_name = "proj-name", projectEvent_description = Just "", projectEvent_web_url = "https://example.com/joe/proj-name", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:joe/proj-name.git", projectEvent_git_http_url = "https://example.com/joe/proj-name.git", projectEvent_namespace = "Joe", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe/proj-name", projectEvent_default_branch = "master", projectEvent_homepage = Just "https://example.com/joe/proj-name", projectEvent_url = "git@example.com:joe/proj-name.git", projectEvent_ssh_url = "git@example.com:joe/proj-name.git", projectEvent_http_url = "https://example.com/joe/proj-name.git"}, note_event_object_attributes = NoteObjectAttributes {note_object_attributes_attachment = Nothing, note_object_attributes_author_id = 2477, note_object_attributes_change_position = Nothing, note_object_attributes_commit_id = Just "8dd4c91c0efac607bf6d164ea7e5fd92e6fbe7c6", note_object_attributes_created_at = "2024-11-20 05:48:59 UTC", note_object_attributes_discussion_id = "163e23673e00ebb477a030944824cf25109bdf3e", note_object_attributes_id = 17030, note_object_attributes_line_code = Nothing, note_object_attributes_note = "The note.", note_object_attributes_noteable_id = Nothing, note_object_attributes_noteable_type = "Commit", note_object_attributes_original_position = Nothing, note_object_attributes_position = Nothing, note_object_attributes_project_id = 19102, note_object_attributes_resolved_at = Nothing, note_object_attributes_resolved_by_id = Nothing, note_object_attributes_resolved_by_push = Nothing, note_object_attributes_st_diff = Nothing, note_object_attributes_system = False, note_object_attributes_type = Nothing, note_object_attributes_updated_at = Just "2024-11-20 05:48:59 UTC", note_object_attributes_updated_by_id = Nothing, note_object_attributes_description = "The note.", note_object_attributes_url = "https://example.com/joe/proj-name/-/commit/abcde#note_17030", note_object_attributes_action = "create"}, note_event_repository = RepositoryEvent {repositoryEvent_name = "proj-name", repositoryEvent_url = "git@example.com:joe/proj-name.git", repositoryEvent_description = Just "", repositoryEvent_homepage = Just "https://example.com/joe/proj-name", repositoryEvent_git_http_url = Nothing, repositoryEvent_git_ssh_url = Nothing, repositoryEvent_visibility_level = Nothing}, note_event_issue = Nothing}
+
+note3Haskell :: NoteEvent
+note3Haskell =
+  NoteEvent {note_event_object_kind = "note", note_event_event_type = "note", note_event_user = User {user_id = 1853, user_username = "joe", user_bio = Nothing, user_two_factor_enabled = Nothing, user_last_sign_in_at = Nothing, user_current_sign_in_at = Nothing, user_last_activity_on = Nothing, user_skype = Nothing, user_twitter = Nothing, user_website_url = Nothing, user_theme_id = Nothing, user_color_scheme_id = Nothing, user_external = Nothing, user_private_profile = Nothing, user_projects_limit = Nothing, user_can_create_group = Nothing, user_can_create_project = Nothing, user_public_email = Nothing, user_organization = Nothing, user_job_title = Nothing, user_pronouns = Nothing, user_linkedin = Nothing, user_confirmed_at = Nothing, user_identities = Nothing, user_name = "Joe", user_email = Just "[REDACTED]", user_followers = Nothing, user_bot = Nothing, user_following = Nothing, user_state = Nothing, user_avatar_url = Just "https://secure.gravatar.com/avatar/abc", user_web_url = Nothing, user_location = Nothing, user_extern_uid = Nothing, user_group_id_for_saml = Nothing, user_discussion_locked = Nothing, user_created_at = Nothing, user_note = Nothing, user_password = Nothing, user_force_random_password = Nothing, user_providor = Nothing, user_reset_password = Nothing, user_skip_confirmation = Nothing, user_view_diffs_file_by_file = Nothing}, note_event_project_id = 19127, note_event_project = ProjectEvent {projectEvent_id = Just 19127, projectEvent_name = "f21sf-24-the-proj-name,", projectEvent_description = Just "", projectEvent_web_url = "https://example.com/joe/the-proj-name,", projectEvent_avatar_url = Nothing, projectEvent_git_ssh_url = "git@example.com:joe/the-proj-name,.git", projectEvent_git_http_url = "https://example.com/joe/the-proj-name,.git", projectEvent_namespace = "Joe", projectEvent_visibility_level = Private, projectEvent_path_with_namespace = "joe/the-proj-name,", projectEvent_default_branch = "master", projectEvent_homepage = Just "https://example.com/joe/the-proj-name,", projectEvent_url = "git@example.com:joe/the-proj-name,.git", projectEvent_ssh_url = "git@example.com:joe/the-proj-name,.git", projectEvent_http_url = "https://example.com/joe/the-proj-name,.git"}, note_event_object_attributes = NoteObjectAttributes {note_object_attributes_attachment = Nothing, note_object_attributes_author_id = 1853, note_object_attributes_change_position = Nothing, note_object_attributes_commit_id = Nothing, note_object_attributes_created_at = "2024-11-23 15:44:37 UTC", note_object_attributes_discussion_id = "db1ba73e93464583ae259a6ea79f95a7e38c7e3c", note_object_attributes_id = 17524, note_object_attributes_line_code = Nothing, note_object_attributes_note = "The description", note_object_attributes_noteable_id = Just 2449, note_object_attributes_noteable_type = "Issue", note_object_attributes_original_position = Nothing, note_object_attributes_position = Nothing, note_object_attributes_project_id = 19127, note_object_attributes_resolved_at = Nothing, note_object_attributes_resolved_by_id = Nothing, note_object_attributes_resolved_by_push = Nothing, note_object_attributes_st_diff = Nothing, note_object_attributes_system = False, note_object_attributes_type = Nothing, note_object_attributes_updated_at = Just "2024-11-23 15:44:37 UTC", note_object_attributes_updated_by_id = Nothing, note_object_attributes_description = "The description", note_object_attributes_url = "https://example.com/joe/the-proj-name,/-/work_items/76#note_17524", note_object_attributes_action = "create"}, note_event_repository = RepositoryEvent {repositoryEvent_name = "the repo name", repositoryEvent_url = "git@example.com:joe/the-proj-name,.git", repositoryEvent_description = Just "", repositoryEvent_homepage = Just "https://example.com/joe/the-proj-name,", repositoryEvent_git_http_url = Nothing, repositoryEvent_git_ssh_url = Nothing, repositoryEvent_visibility_level = Nothing}, note_event_issue = Just (IssueEventObjectAttributes {issue_event_object_attributes_author_id = 1853, issue_event_object_attributes_closed_at = Nothing, issue_event_object_attributes_confidential = False, issue_event_object_attributes_created_at = "2024-11-11 14:23:52 UTC", issue_event_object_attributes_description = Nothing, issue_event_object_attributes_discussion_locked = Nothing, issue_event_object_attributes_due_date = Nothing, issue_event_object_attributes_id = 2449, issue_event_object_attributes_iid = 76, issue_event_object_attributes_last_edited_at = Nothing, issue_event_object_attributes_last_edited_by_id = Nothing, issue_event_object_attributes_milestone_id = Just 63, issue_event_object_attributes_move_to_id = Nothing, issue_event_object_attributes_duplicated_to_id = Nothing, issue_event_object_attributes_project_id = 19127, issue_event_object_attributes_relative_position = Just 38988, issue_event_object_attributes_state_id = 1, issue_event_object_attributes_time_estimate = 0, issue_event_object_attributes_title = "issue title", issue_event_object_attributes_updated_at = "2024-11-23 15:44:37 UTC", issue_event_object_attributes_updated_by_id = Just 1853, issue_event_object_attributes_type = "Task", issue_event_object_attributes_url = "https://example.com/joe/the-proj-name,/-/work_items/76", issue_event_object_attributes_total_time_spent = 0, issue_event_object_attributes_time_change = 0, issue_event_object_attributes_human_total_time_spent = Nothing, issue_event_object_attributes_human_time_change = Nothing, issue_event_object_attributes_human_time_estimate = Nothing})}
+
+wikiPage1Haskell :: WikiPageEvent
+wikiPage1Haskell =
+  WikiPageEvent {wiki_page_event_object_kind = "wiki_page", wiki_page_event_user = User {user_id = 2908, user_username = "joe", user_bio = Nothing, user_two_factor_enabled = Nothing, user_last_sign_in_at = Nothing, user_current_sign_in_at = Nothing, user_last_activity_on = Nothing, user_skype = Nothing, user_twitter = Nothing, user_website_url = Nothing, user_theme_id = Nothing, user_color_scheme_id = Nothing, user_external = Nothing, user_private_profile = Nothing, user_projects_limit = Nothing, user_can_create_group = Nothing, user_can_create_project = Nothing, user_public_email = Nothing, user_organization = Nothing, user_job_title = Nothing, user_pronouns = Nothing, user_linkedin = Nothing, user_confirmed_at = Nothing, user_identities = Nothing, user_name = "Joe", user_email = Just "[REDACTED]", user_followers = Nothing, user_bot = Nothing, user_following = Nothing, user_state = Nothing, user_avatar_url = Just "https://secure.gravatar.com/avatar/abc", user_web_url = Nothing, user_location = Nothing, user_extern_uid = Nothing, user_group_id_for_saml = Nothing, user_discussion_locked = Nothing, user_created_at = Nothing, user_note = Nothing, user_password = Nothing, user_force_random_password = Nothing, user_providor = Nothing, user_reset_password = Nothing, user_skip_confirmation = Nothing, user_view_diffs_file_by_file = Nothing}, wiki_page_event_wiki = Wiki {wiki_web_url = Just "https://example.com/joe/proj-name/-/wikis/home", wiki_git_ssh_url = Just "git@example.com:joe/proj-name.wiki.git", wiki_git_http_url = Just "https://example.com/joe/proj-name.wiki.git", wiki_path_with_namespace = Just "joe/proj-name.wiki", wiki_default_branch = Just "main"}, wiki_page_event_object_attributes = WikiPageObjectAttributes {wiki_page_object_attributes_slug = Just "home", wiki_page_object_attributes_title = Just "home", wiki_page_object_attributes_format = Just "markdown", wiki_page_object_attributes_message = Just "The wiki message", wiki_page_object_attributes_version_id = Just "99c9ea1617756edfb6187ab82e663afb834cd306", wiki_page_object_attributes_url = Just "https://example.com/joe/proj-name/-/wikis/home", wiki_page_object_attributes_action = Just "update", wiki_page_object_attributes_diff_url = Just "https://example.com/joe/proj-name/-/wikis/home/diff?version_id=99c9ea1617756edfb6187ab82e663afb834cd306"}}
+
+workItem1Haskell :: WorkItemEvent
+workItem1Haskell =
+  WorkItemEvent {work_item_event_user = User {user_id = 1853, user_username = "joe", user_bio = Nothing, user_two_factor_enabled = Nothing, user_last_sign_in_at = Nothing, user_current_sign_in_at = Nothing, user_last_activity_on = Nothing, user_skype = Nothing, user_twitter = Nothing, user_website_url = Nothing, user_theme_id = Nothing, user_color_scheme_id = Nothing, user_external = Nothing, user_private_profile = Nothing, user_projects_limit = Nothing, user_can_create_group = Nothing, user_can_create_project = Nothing, user_public_email = Nothing, user_organization = Nothing, user_job_title = Nothing, user_pronouns = Nothing, user_linkedin = Nothing, user_confirmed_at = Nothing, user_identities = Nothing, user_name = "Joe Bloggs", user_email = Just "[REDACTED]", user_followers = Nothing, user_bot = Nothing, user_following = Nothing, user_state = Nothing, user_avatar_url = Just "https://secure.gravatar.com/avatar/abc", user_web_url = Nothing, user_location = Nothing, user_extern_uid = Nothing, user_group_id_for_saml = Nothing, user_discussion_locked = Nothing, user_created_at = Nothing, user_note = Nothing, user_password = Nothing, user_force_random_password = Nothing, user_providor = Nothing, user_reset_password = Nothing, user_skip_confirmation = Nothing, user_view_diffs_file_by_file = Nothing}, work_item_event_object_attributes = WorkItemObjectAttributes {work_item_object_author_id = 1853, work_item_object_closed_at = "2024-11-23 15:56:50 UTC", work_item_object_confidential = False, work_item_object_created_at = "2024-11-11 14:23:52 UTC", work_item_object_description = Nothing, work_item_object_discussion_locked = Nothing, work_item_object_due_date = Nothing, work_item_object_id = 2449, work_item_object_iid = 76, work_item_object_last_edited_at = Nothing, work_item_object_last_edited_by_id = Nothing, work_item_object_milestone_id = Just 63, work_item_object_moved_to_id = Nothing, work_item_object_duplicated_to_id = Nothing, work_item_object_project_id = 19127, work_item_object_relative_position = 38988, work_item_object_state_id = 2, work_item_object_time_estimate = 0, work_item_object_title = "The title", work_item_object_updated_at = "2024-11-23 15:56:50 UTC", work_item_object_updated_by_id = 1853, work_item_object_type = "Task", work_item_object_url = "http://example.com/joe/project/-/work_items/76", work_item_object_total_time_spent = 0, work_item_object_time_change = 0, work_item_object_human_total_time_spent = Nothing, work_item_object_human_time_change = Nothing, work_item_object_human_time_estimate = Nothing, work_item_object_assignee_ids = [1853], work_item_object_assignee_id = 1853, work_item_object_labels = [Label {label_id = Just 391, label_title = Just "Stage 6", label_color = Just "#330066", label_project_id = Just 19127, label_created_at = Just "2024-11-11 13:54:59 UTC", label_updated_at = Just "2024-11-14 09:04:36 UTC", label_template = Just False, label_description = Just "", label_type = Just "ProjectLabel", label_group_id = Nothing}, Label {label_id = Just 337, label_title = Just "documentation", label_color = Just "#f0ad4e", label_project_id = Just 19127, label_created_at = Just "2024-10-07 07:46:00 UTC", label_updated_at = Just "2024-10-07 07:46:00 UTC", label_template = Just False, label_description = Nothing, label_type = Just "ProjectLabel", label_group_id = Nothing}], work_item_object_state = "closed", work_item_object_severity = "unknown", work_item_object_customer_relations_contacts = [], work_item_object_action = "close"}, work_item_event_labels = [Label {label_id = Just 391, label_title = Just "Stage 6", label_color = Just "#330066", label_project_id = Just 19127, label_created_at = Just "2024-11-11 13:54:59 UTC", label_updated_at = Just "2024-11-14 09:04:36 UTC", label_template = Just False, label_description = Just "", label_type = Just "ProjectLabel", label_group_id = Nothing}, Label {label_id = Just 337, label_title = Just "documentation", label_color = Just "#f0ad4e", label_project_id = Just 19127, label_created_at = Just "2024-10-07 07:46:00 UTC", label_updated_at = Just "2024-10-07 07:46:00 UTC", label_template = Just False, label_description = Nothing, label_type = Just "ProjectLabel", label_group_id = Nothing}], work_item_event_repository = Repository {repository_id = Nothing, repository_name = "proj-name", repository_type = Nothing, repository_path = Nothing, repository_mode = Nothing}, work_item_event_assignees = [User {user_id = 1853, user_username = "joe", user_bio = Nothing, user_two_factor_enabled = Nothing, user_last_sign_in_at = Nothing, user_current_sign_in_at = Nothing, user_last_activity_on = Nothing, user_skype = Nothing, user_twitter = Nothing, user_website_url = Nothing, user_theme_id = Nothing, user_color_scheme_id = Nothing, user_external = Nothing, user_private_profile = Nothing, user_projects_limit = Nothing, user_can_create_group = Nothing, user_can_create_project = Nothing, user_public_email = Nothing, user_organization = Nothing, user_job_title = Nothing, user_pronouns = Nothing, user_linkedin = Nothing, user_confirmed_at = Nothing, user_identities = Nothing, user_name = "Joe Bloggs", user_email = Just "[REDACTED]", user_followers = Nothing, user_bot = Nothing, user_following = Nothing, user_state = Nothing, user_avatar_url = Just "https://secure.gravatar.com/avatar/abc", user_web_url = Nothing, user_location = Nothing, user_extern_uid = Nothing, user_group_id_for_saml = Nothing, user_discussion_locked = Nothing, user_created_at = Nothing, user_note = Nothing, user_password = Nothing, user_force_random_password = Nothing, user_providor = Nothing, user_reset_password = Nothing, user_skip_confirmation = Nothing, user_view_diffs_file_by_file = Nothing}]}
