module Github open Thoth.Json.Net type UserData = { Login: string Id: uint32 Avatar_url: string Url: string Html_url: string Followers_url: string Gists_url: string Repos_url: string Site_admin: bool Bio: string Public_repos: uint32 Followers: uint32 Following: uint32 Created_at: string Updated_at: string Location: option Blog: option } static member Decoder: Decoder = Decode.object (fun get -> { Login = get.Required.Field "login" Decode.string Id = get.Required.Field "id" Decode.uint32 Avatar_url = get.Required.Field "avatar_url" Decode.string Url = get.Required.Field "url" Decode.string Html_url = get.Required.Field "html_url" Decode.string Followers_url = get.Required.Field "followers_url" Decode.string Gists_url = get.Required.Field "gists_url" Decode.string Repos_url = get.Required.Field "repos_url" Decode.string Site_admin = get.Required.Field "site_admin" Decode.bool Bio = get.Required.Field "bio" Decode.string Public_repos = get.Required.Field "public_repos" Decode.uint32 Followers = get.Required.Field "followers" Decode.uint32 Following = get.Required.Field "following" Decode.uint32 Created_at = get.Required.Field "created_at" Decode.string Updated_at = get.Required.Field "updated_at" Decode.string Location = get.Optional.Field "location" Decode.string Blog = get.Optional.Field "blog" Decode.string } ) static member Encoder value = Encode.object [ "login", Encode.string value.Login "id", Encode.uint32 value.Id "avatar_url", Encode.string value.Avatar_url "url", Encode.string value.Url "html_url", Encode.string value.Html_url "followers_url", Encode.string value.Followers_url "gists_url", Encode.string value.Gists_url "repos_url", Encode.string value.Repos_url "site_admin", Encode.bool value.Site_admin "bio", Encode.string value.Bio "public_repos", Encode.uint32 value.Public_repos "followers", Encode.uint32 value.Followers "following", Encode.uint32 value.Following "created_at", Encode.string value.Created_at "updated_at", Encode.string value.Updated_at "location", Encode.option Encode.string value.Location "blog", Encode.option Encode.string value.Blog ] type OwnerData = { Id: uint32 Login: string Url: string Html_url: string Followers_url: string Gists_url: string Repos_url: string Site_admin: bool } static member Decoder: Decoder = Decode.object (fun get -> { Id = get.Required.Field "id" Decode.uint32 Login = get.Required.Field "login" Decode.string Url = get.Required.Field "url" Decode.string Html_url = get.Required.Field "html_url" Decode.string Followers_url = get.Required.Field "followers_url" Decode.string Gists_url = get.Required.Field "gists_url" Decode.string Repos_url = get.Required.Field "repos_url" Decode.string Site_admin = get.Required.Field "site_admin" Decode.bool } ) static member Encoder value = Encode.object [ "id", Encode.uint32 value.Id "login", Encode.string value.Login "url", Encode.string value.Url "html_url", Encode.string value.Html_url "followers_url", Encode.string value.Followers_url "gists_url", Encode.string value.Gists_url "repos_url", Encode.string value.Repos_url "site_admin", Encode.bool value.Site_admin ] type OrganizationData = { Login: string Id: uint32 Avatar_url: string Members_url: option Repos_url: string Description: option } static member Decoder: Decoder = Decode.object (fun get -> { Login = get.Required.Field "login" Decode.string Id = get.Required.Field "id" Decode.uint32 Avatar_url = get.Required.Field "avatar_url" Decode.string Members_url = get.Optional.Field "members_url" Decode.string Repos_url = get.Required.Field "repos_url" Decode.string Description = get.Optional.Field "description" Decode.string } ) static member Encoder value = Encode.object [ "login", Encode.string value.Login "id", Encode.uint32 value.Id "avatar_url", Encode.string value.Avatar_url "members_url", Encode.option Encode.string value.Members_url "repos_url", Encode.string value.Repos_url "description", Encode.option Encode.string value.Description ] type Owner = | User of OwnerData | Organization of OrganizationData static member UserDecoder: Decoder = Decode.object (fun get -> User { Id = get.Required.Field "id" Decode.uint32 Login = get.Required.Field "login" Decode.string Url = get.Required.Field "url" Decode.string Html_url = get.Required.Field "html_url" Decode.string Followers_url = get.Required.Field "followers_url" Decode.string Gists_url = get.Required.Field "gists_url" Decode.string Repos_url = get.Required.Field "repos_url" Decode.string Site_admin = get.Required.Field "site_admin" Decode.bool } ) static member OrganizationDecoder: Decoder = Decode.object (fun get -> Organization { Login = get.Required.Field "login" Decode.string Id = get.Required.Field "id" Decode.uint32 Avatar_url = get.Required.Field "avatar_url" Decode.string Members_url = get.Optional.Field "members_url" Decode.string Repos_url = get.Required.Field "repos_url" Decode.string Description = get.Optional.Field "description" Decode.string } ) static member Decoder: Decoder = GotynoCoders.decodeWithTypeTag "type" [| "User", Owner.UserDecoder "Organization", Owner.OrganizationDecoder |] static member Encoder = function | User payload -> Encode.object [ "type", Encode.string "User" "id", Encode.uint32 payload.Id "login", Encode.string payload.Login "url", Encode.string payload.Url "html_url", Encode.string payload.Html_url "followers_url", Encode.string payload.Followers_url "gists_url", Encode.string payload.Gists_url "repos_url", Encode.string payload.Repos_url "site_admin", Encode.bool payload.Site_admin ] | Organization payload -> Encode.object [ "type", Encode.string "Organization" "login", Encode.string payload.Login "id", Encode.uint32 payload.Id "avatar_url", Encode.string payload.Avatar_url "members_url", Encode.option Encode.string payload.Members_url "repos_url", Encode.string payload.Repos_url "description", Encode.option Encode.string payload.Description ] type Repository = { Id: uint32 Name: string Full_name: string Private: bool Fork: bool Created_at: string Updated_at: string Description: option Owner: Owner Url: string Html_url: string Language: option } static member Decoder: Decoder = Decode.object (fun get -> { Id = get.Required.Field "id" Decode.uint32 Name = get.Required.Field "name" Decode.string Full_name = get.Required.Field "full_name" Decode.string Private = get.Required.Field "private" Decode.bool Fork = get.Required.Field "fork" Decode.bool Created_at = get.Required.Field "created_at" Decode.string Updated_at = get.Required.Field "updated_at" Decode.string Description = get.Optional.Field "description" Decode.string Owner = get.Required.Field "owner" Owner.Decoder Url = get.Required.Field "url" Decode.string Html_url = get.Required.Field "html_url" Decode.string Language = get.Optional.Field "language" Decode.string } ) static member Encoder value = Encode.object [ "id", Encode.uint32 value.Id "name", Encode.string value.Name "full_name", Encode.string value.Full_name "private", Encode.bool value.Private "fork", Encode.bool value.Fork "created_at", Encode.string value.Created_at "updated_at", Encode.string value.Updated_at "description", Encode.option Encode.string value.Description "owner", Owner.Encoder value.Owner "url", Encode.string value.Url "html_url", Encode.string value.Html_url "language", Encode.option Encode.string value.Language ] type Pusher = { Name: string Email: string } static member Decoder: Decoder = Decode.object (fun get -> { Name = get.Required.Field "name" Decode.string Email = get.Required.Field "email" Decode.string } ) static member Encoder value = Encode.object [ "name", Encode.string value.Name "email", Encode.string value.Email ] type Author = { Name: string Email: string Username: string } static member Decoder: Decoder = Decode.object (fun get -> { Name = get.Required.Field "name" Decode.string Email = get.Required.Field "email" Decode.string Username = get.Required.Field "username" Decode.string } ) static member Encoder value = Encode.object [ "name", Encode.string value.Name "email", Encode.string value.Email "username", Encode.string value.Username ] type Label = { Id: uint32 Url: string Name: string Color: string Default: bool Description: string } static member Decoder: Decoder