content: {-# LANGUAGE DataKinds #-}
  {-# LANGUAGE DerivingStrategies #-}
  {-# LANGUAGE DuplicateRecordFields #-}
  {-# LANGUAGE ImportQualifiedPost #-}
  {-# LANGUAGE LambdaCase #-}
  {-# LANGUAGE OverloadedStrings #-}
  {-# LANGUAGE PatternSynonyms #-}
  {-# LANGUAGE RecordWildCards #-}
  {-# LANGUAGE StrictData #-}
  {-# LANGUAGE TypeFamilies #-}
  {-# LANGUAGE NoImplicitPrelude #-}
  {-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
  {-# OPTIONS_GHC -fno-warn-name-shadowing #-}
  {-# OPTIONS_GHC -fno-warn-unused-binds #-}
  {-# OPTIONS_GHC -fno-warn-unused-imports #-}
  {-# OPTIONS_GHC -fno-warn-unused-matches #-}
  
  -- |
  -- Module      : Gogol.Blogger.Internal.Product
  -- Copyright   : (c) 2015-2025 Brendan Hay
  -- License     : Mozilla Public License, v. 2.0.
  -- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
  --               Toni Cebrián <toni@tonicebrian.com>
  -- Stability   : auto-generated
  -- Portability : non-portable (GHC extensions)
  module Gogol.Blogger.Internal.Product
    ( -- * Blog
      Blog (..),
      newBlog,
  
      -- * Blog_Locale
      Blog_Locale (..),
      newBlog_Locale,
  
      -- * Blog_Pages
      Blog_Pages (..),
      newBlog_Pages,
  
      -- * Blog_Posts
      Blog_Posts (..),
      newBlog_Posts,
  
      -- * BlogList
      BlogList (..),
      newBlogList,
  
      -- * BlogPerUserInfo
      BlogPerUserInfo (..),
      newBlogPerUserInfo,
  
      -- * BlogUserInfo
      BlogUserInfo (..),
      newBlogUserInfo,
  
      -- * Comment
      Comment (..),
      newComment,
  
      -- * Comment_Author
      Comment_Author (..),
      newComment_Author,
  
      -- * Comment_Author_Image
      Comment_Author_Image (..),
      newComment_Author_Image,
  
      -- * Comment_Blog
      Comment_Blog (..),
      newComment_Blog,
  
      -- * Comment_InReplyTo
      Comment_InReplyTo (..),
      newComment_InReplyTo,
  
      -- * Comment_Post
      Comment_Post (..),
      newComment_Post,
  
      -- * CommentList
      CommentList (..),
      newCommentList,
  
      -- * Page
      Page (..),
      newPage,
  
      -- * Page_Author
      Page_Author (..),
      newPage_Author,
  
      -- * Page_Author_Image
      Page_Author_Image (..),
      newPage_Author_Image,
  
      -- * Page_Blog
      Page_Blog (..),
      newPage_Blog,
  
      -- * PageList
      PageList (..),
      newPageList,
  
      -- * Pageviews
      Pageviews (..),
      newPageviews,
  
      -- * Pageviews_CountsItem
      Pageviews_CountsItem (..),
      newPageviews_CountsItem,
  
      -- * Post'
      Post' (..),
      newPost,
  
      -- * Post_Author
      Post_Author (..),
      newPost_Author,
  
      -- * Post_Author_Image
      Post_Author_Image (..),
      newPost_Author_Image,
  
      -- * Post_Blog
      Post_Blog (..),
      newPost_Blog,
  
      -- * Post_ImagesItem
      Post_ImagesItem (..),
      newPost_ImagesItem,
  
      -- * Post_Location
      Post_Location (..),
      newPost_Location,
  
      -- * Post_Replies
      Post_Replies (..),
      newPost_Replies,
  
      -- * PostList
      PostList (..),
      newPostList,
  
      -- * PostPerUserInfo
      PostPerUserInfo (..),
      newPostPerUserInfo,
  
      -- * PostUserInfo
      PostUserInfo (..),
      newPostUserInfo,
  
      -- * PostUserInfosList
      PostUserInfosList (..),
      newPostUserInfosList,
  
      -- * User
      User (..),
      newUser,
  
      -- * User_Blogs
      User_Blogs (..),
      newUser_Blogs,
  
      -- * User_Locale
      User_Locale (..),
      newUser_Locale,
    )
  where
  
  import Gogol.Blogger.Internal.Sum
  import Gogol.Prelude qualified as Core
  
  --
  -- /See:/ 'newBlog' smart constructor.
  data Blog = Blog
    { -- | The JSON custom meta-data for the Blog.
      customMetaData :: (Core.Maybe Core.Text),
      -- | The description of this blog. This is displayed underneath the title.
      description :: (Core.Maybe Core.Text),
      -- | The identifier for this resource.
      id :: (Core.Maybe Core.Text),
      -- | The kind of this entry. Always blogger#blog.
      kind :: (Core.Maybe Core.Text),
      -- | The locale this Blog is set to.
      locale :: (Core.Maybe Blog_Locale),
      -- | The name of this blog. This is displayed as the title.
      name :: (Core.Maybe Core.Text),
      -- | The container of pages in this blog.
      pages :: (Core.Maybe Blog_Pages),
      -- | The container of posts in this blog.
      posts :: (Core.Maybe Blog_Posts),
      -- | RFC 3339 date-time when this blog was published.
      published :: (Core.Maybe Core.Text),
      -- | The API REST URL to fetch this resource from.
      selfLink :: (Core.Maybe Core.Text),
      -- | The status of the blog.
      status :: (Core.Maybe Blog_Status),
      -- | RFC 3339 date-time when this blog was last updated.
      updated :: (Core.Maybe Core.Text),
      -- | The URL where this blog is published.
      url :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Blog' with the minimum fields required to make a request.
  newBlog ::
    Blog
  newBlog =
    Blog
      { customMetaData = Core.Nothing,
        description = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        locale = Core.Nothing,
        name = Core.Nothing,
        pages = Core.Nothing,
        posts = Core.Nothing,
        published = Core.Nothing,
        selfLink = Core.Nothing,
        status = Core.Nothing,
        updated = Core.Nothing,
        url = Core.Nothing
      }
  
  instance Core.FromJSON Blog where
    parseJSON =
      Core.withObject
        "Blog"
        ( \o ->
            Blog
              Core.<$> (o Core..:? "customMetaData")
              Core.<*> (o Core..:? "description")
              Core.<*> (o Core..:? "id")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "locale")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "pages")
              Core.<*> (o Core..:? "posts")
              Core.<*> (o Core..:? "published")
              Core.<*> (o Core..:? "selfLink")
              Core.<*> (o Core..:? "status")
              Core.<*> (o Core..:? "updated")
              Core.<*> (o Core..:? "url")
        )
  
  instance Core.ToJSON Blog where
    toJSON Blog {..} =
      Core.object
        ( Core.catMaybes
            [ ("customMetaData" Core..=) Core.<$> customMetaData,
              ("description" Core..=) Core.<$> description,
              ("id" Core..=) Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("locale" Core..=) Core.<$> locale,
              ("name" Core..=) Core.<$> name,
              ("pages" Core..=) Core.<$> pages,
              ("posts" Core..=) Core.<$> posts,
              ("published" Core..=) Core.<$> published,
              ("selfLink" Core..=) Core.<$> selfLink,
              ("status" Core..=) Core.<$> status,
              ("updated" Core..=) Core.<$> updated,
              ("url" Core..=) Core.<$> url
            ]
        )
  
  -- | The locale this Blog is set to.
  --
  -- /See:/ 'newBlog_Locale' smart constructor.
  data Blog_Locale = Blog_Locale
    { -- | The country this blog\'s locale is set to.
      country :: (Core.Maybe Core.Text),
      -- | The language this blog is authored in.
      language :: (Core.Maybe Core.Text),
      -- | The language variant this blog is authored in.
      variant :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Blog_Locale' with the minimum fields required to make a request.
  newBlog_Locale ::
    Blog_Locale
  newBlog_Locale =
    Blog_Locale
      { country = Core.Nothing,
        language = Core.Nothing,
        variant = Core.Nothing
      }
  
  instance Core.FromJSON Blog_Locale where
    parseJSON =
      Core.withObject
        "Blog_Locale"
        ( \o ->
            Blog_Locale
              Core.<$> (o Core..:? "country")
              Core.<*> (o Core..:? "language")
              Core.<*> (o Core..:? "variant")
        )
  
  instance Core.ToJSON Blog_Locale where
    toJSON Blog_Locale {..} =
      Core.object
        ( Core.catMaybes
            [ ("country" Core..=) Core.<$> country,
              ("language" Core..=) Core.<$> language,
              ("variant" Core..=) Core.<$> variant
            ]
        )
  
  -- | The container of pages in this blog.
  --
  -- /See:/ 'newBlog_Pages' smart constructor.
  data Blog_Pages = Blog_Pages
    { -- | The URL of the container for pages in this blog.
      selfLink :: (Core.Maybe Core.Text),
      -- | The count of pages in this blog.
      totalItems :: (Core.Maybe Core.Int32)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Blog_Pages' with the minimum fields required to make a request.
  newBlog_Pages ::
    Blog_Pages
  newBlog_Pages =
    Blog_Pages {selfLink = Core.Nothing, totalItems = Core.Nothing}
  
  instance Core.FromJSON Blog_Pages where
    parseJSON =
      Core.withObject
        "Blog_Pages"
        ( \o ->
            Blog_Pages
              Core.<$> (o Core..:? "selfLink")
              Core.<*> (o Core..:? "totalItems")
        )
  
  instance Core.ToJSON Blog_Pages where
    toJSON Blog_Pages {..} =
      Core.object
        ( Core.catMaybes
            [ ("selfLink" Core..=) Core.<$> selfLink,
              ("totalItems" Core..=) Core.<$> totalItems
            ]
        )
  
  -- | The container of posts in this blog.
  --
  -- /See:/ 'newBlog_Posts' smart constructor.
  data Blog_Posts = Blog_Posts
    { -- | The List of Posts for this Blog.
      items :: (Core.Maybe [Post']),
      -- | The URL of the container for posts in this blog.
      selfLink :: (Core.Maybe Core.Text),
      -- | The count of posts in this blog.
      totalItems :: (Core.Maybe Core.Int32)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Blog_Posts' with the minimum fields required to make a request.
  newBlog_Posts ::
    Blog_Posts
  newBlog_Posts =
    Blog_Posts
      { items = Core.Nothing,
        selfLink = Core.Nothing,
        totalItems = Core.Nothing
      }
  
  instance Core.FromJSON Blog_Posts where
    parseJSON =
      Core.withObject
        "Blog_Posts"
        ( \o ->
            Blog_Posts
              Core.<$> (o Core..:? "items")
              Core.<*> (o Core..:? "selfLink")
              Core.<*> (o Core..:? "totalItems")
        )
  
  instance Core.ToJSON Blog_Posts where
    toJSON Blog_Posts {..} =
      Core.object
        ( Core.catMaybes
            [ ("items" Core..=) Core.<$> items,
              ("selfLink" Core..=) Core.<$> selfLink,
              ("totalItems" Core..=) Core.<$> totalItems
            ]
        )
  
  --
  -- /See:/ 'newBlogList' smart constructor.
  data BlogList = BlogList
    { -- | Admin level list of blog per-user information.
      blogUserInfos :: (Core.Maybe [BlogUserInfo]),
      -- | The list of Blogs this user has Authorship or Admin rights over.
      items :: (Core.Maybe [Blog]),
      -- | The kind of this entity. Always blogger#blogList.
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'BlogList' with the minimum fields required to make a request.
  newBlogList ::
    BlogList
  newBlogList =
    BlogList
      { blogUserInfos = Core.Nothing,
        items = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON BlogList where
    parseJSON =
      Core.withObject
        "BlogList"
        ( \o ->
            BlogList
              Core.<$> (o Core..:? "blogUserInfos")
              Core.<*> (o Core..:? "items")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON BlogList where
    toJSON BlogList {..} =
      Core.object
        ( Core.catMaybes
            [ ("blogUserInfos" Core..=) Core.<$> blogUserInfos,
              ("items" Core..=) Core.<$> items,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  --
  -- /See:/ 'newBlogPerUserInfo' smart constructor.
  data BlogPerUserInfo = BlogPerUserInfo
    { -- | ID of the Blog resource.
      blogId :: (Core.Maybe Core.Text),
      -- | True if the user has Admin level access to the blog.
      hasAdminAccess :: (Core.Maybe Core.Bool),
      -- | The kind of this entity. Always blogger#blogPerUserInfo.
      kind :: (Core.Maybe Core.Text),
      -- | The Photo Album Key for the user when adding photos to the blog.
      photosAlbumKey :: (Core.Maybe Core.Text),
      -- | Access permissions that the user has for the blog (ADMIN, AUTHOR, or READER).
      role' :: (Core.Maybe BlogPerUserInfo_Role),
      -- | ID of the User.
      userId :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'BlogPerUserInfo' with the minimum fields required to make a request.
  newBlogPerUserInfo ::
    BlogPerUserInfo
  newBlogPerUserInfo =
    BlogPerUserInfo
      { blogId = Core.Nothing,
        hasAdminAccess = Core.Nothing,
        kind = Core.Nothing,
        photosAlbumKey = Core.Nothing,
        role' = Core.Nothing,
        userId = Core.Nothing
      }
  
  instance Core.FromJSON BlogPerUserInfo where
    parseJSON =
      Core.withObject
        "BlogPerUserInfo"
        ( \o ->
            BlogPerUserInfo
              Core.<$> (o Core..:? "blogId")
              Core.<*> (o Core..:? "hasAdminAccess")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "photosAlbumKey")
              Core.<*> (o Core..:? "role")
              Core.<*> (o Core..:? "userId")
        )
  
  instance Core.ToJSON BlogPerUserInfo where
    toJSON BlogPerUserInfo {..} =
      Core.object
        ( Core.catMaybes
            [ ("blogId" Core..=) Core.<$> blogId,
              ("hasAdminAccess" Core..=) Core.<$> hasAdminAccess,
              ("kind" Core..=) Core.<$> kind,
              ("photosAlbumKey" Core..=) Core.<$> photosAlbumKey,
              ("role" Core..=) Core.<$> role',
              ("userId" Core..=) Core.<$> userId
            ]
        )
  
  --
  -- /See:/ 'newBlogUserInfo' smart constructor.
  data BlogUserInfo = BlogUserInfo
    { -- | The Blog resource.
      blog :: (Core.Maybe Blog),
      -- | Information about a User for the Blog.
      blogUserInfo :: (Core.Maybe BlogPerUserInfo),
      -- | The kind of this entity. Always blogger#blogUserInfo.
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'BlogUserInfo' with the minimum fields required to make a request.
  newBlogUserInfo ::
    BlogUserInfo
  newBlogUserInfo =
    BlogUserInfo
      { blog = Core.Nothing,
        blogUserInfo = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON BlogUserInfo where
    parseJSON =
      Core.withObject
        "BlogUserInfo"
        ( \o ->
            BlogUserInfo
              Core.<$> (o Core..:? "blog")
              Core.<*> (o Core..:? "blog_user_info")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON BlogUserInfo where
    toJSON BlogUserInfo {..} =
      Core.object
        ( Core.catMaybes
            [ ("blog" Core..=) Core.<$> blog,
              ("blog_user_info" Core..=) Core.<$> blogUserInfo,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  --
  -- /See:/ 'newComment' smart constructor.
  data Comment = Comment
    { -- | The author of this Comment.
      author :: (Core.Maybe Comment_Author),
      -- | Data about the blog containing this comment.
      blog :: (Core.Maybe Comment_Blog),
      -- | The actual content of the comment. May include HTML markup.
      content :: (Core.Maybe Core.Text),
      -- | The identifier for this resource.
      id :: (Core.Maybe Core.Text),
      -- | Data about the comment this is in reply to.
      inReplyTo :: (Core.Maybe Comment_InReplyTo),
      -- | The kind of this entry. Always blogger#comment.
      kind :: (Core.Maybe Core.Text),
      -- | Data about the post containing this comment.
      post :: (Core.Maybe Comment_Post),
      -- | RFC 3339 date-time when this comment was published.
      published :: (Core.Maybe Core.Text),
      -- | The API REST URL to fetch this resource from.
      selfLink :: (Core.Maybe Core.Text),
      -- | The status of the comment (only populated for admin users).
      status :: (Core.Maybe Comment_Status),
      -- | RFC 3339 date-time when this comment was last updated.
      updated :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Comment' with the minimum fields required to make a request.
  newComment ::
    Comment
  newComment =
    Comment
      { author = Core.Nothing,
        blog = Core.Nothing,
        content = Core.Nothing,
        id = Core.Nothing,
        inReplyTo = Core.Nothing,
        kind = Core.Nothing,
        post = Core.Nothing,
        published = Core.Nothing,
        selfLink = Core.Nothing,
        status = Core.Nothing,
        updated = Core.Nothing
      }
  
  instance Core.FromJSON Comment where
    parseJSON =
      Core.withObject
        "Comment"
        ( \o ->
            Comment
              Core.<$> (o Core..:? "author")
              Core.<*> (o Core..:? "blog")
              Core.<*> (o Core..:? "content")
              Core.<*> (o Core..:? "id")
              Core.<*> (o Core..:? "inReplyTo")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "post")
              Core.<*> (o Core..:? "published")
              Core.<*> (o Core..:? "selfLink")
              Core.<*> (o Core..:? "status")
              Core.<*> (o Core..:? "updated")
        )
  
  instance Core.ToJSON Comment where
    toJSON Comment {..} =
      Core.object
        ( Core.catMaybes
            [ ("author" Core..=) Core.<$> author,
              ("blog" Core..=) Core.<$> blog,
              ("content" Core..=) Core.<$> content,
              ("id" Core..=) Core.<$> id,
              ("inReplyTo" Core..=) Core.<$> inReplyTo,
              ("kind" Core..=) Core.<$> kind,
              ("post" Core..=) Core.<$> post,
              ("published" Core..=) Core.<$> published,
              ("selfLink" Core..=) Core.<$> selfLink,
              ("status" Core..=) Core.<$> status,
              ("updated" Core..=) Core.<$> updated
            ]
        )
  
  -- | The author of this Comment.
  --
  -- /See:/ 'newComment_Author' smart constructor.
  data Comment_Author = Comment_Author
    { -- | The display name.
      displayName :: (Core.Maybe Core.Text),
      -- | The identifier of the creator.
      id :: (Core.Maybe Core.Text),
      -- | The creator\'s avatar.
      image :: (Core.Maybe Comment_Author_Image),
      -- | The URL of the creator\'s Profile page.
      url :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Comment_Author' with the minimum fields required to make a request.
  newComment_Author ::
    Comment_Author
  newComment_Author =
    Comment_Author
      { displayName = Core.Nothing,
        id = Core.Nothing,
        image = Core.Nothing,
        url = Core.Nothing
      }
  
  instance Core.FromJSON Comment_Author where
    parseJSON =
      Core.withObject
        "Comment_Author"
        ( \o ->
            Comment_Author
              Core.<$> (o Core..:? "displayName")
              Core.<*> (o Core..:? "id")
              Core.<*> (o Core..:? "image")
              Core.<*> (o Core..:? "url")
        )
  
  instance Core.ToJSON Comment_Author where
    toJSON Comment_Author {..} =
      Core.object
        ( Core.catMaybes
            [ ("displayName" Core..=) Core.<$> displayName,
              ("id" Core..=) Core.<$> id,
              ("image" Core..=) Core.<$> image,
              ("url" Core..=) Core.<$> url
            ]
        )
  
  -- | The creator\'s avatar.
  --
  -- /See:/ 'newComment_Author_Image' smart constructor.
  newtype Comment_Author_Image = Comment_Author_Image
    { -- | The creator\'s avatar URL.
      url :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Comment_Author_Image' with the minimum fields required to make a request.
  newComment_Author_Image ::
    Comment_Author_Image
  newComment_Author_Image = Comment_Author_Image {url = Core.Nothing}
  
  instance Core.FromJSON Comment_Author_Image where
    parseJSON =
      Core.withObject
        "Comment_Author_Image"
        (\o -> Comment_Author_Image Core.<$> (o Core..:? "url"))
  
  instance Core.ToJSON Comment_Author_Image where
    toJSON Comment_Author_Image {..} =
      Core.object (Core.catMaybes [("url" Core..=) Core.<$> url])
  
  -- | Data about the blog containing this comment.
  --
  -- /See:/ 'newComment_Blog' smart constructor.
  newtype Comment_Blog = Comment_Blog
    { -- | The identifier of the blog containing this comment.
      id :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Comment_Blog' with the minimum fields required to make a request.
  newComment_Blog ::
    Comment_Blog
  newComment_Blog = Comment_Blog {id = Core.Nothing}
  
  instance Core.FromJSON Comment_Blog where
    parseJSON =
      Core.withObject
        "Comment_Blog"
        (\o -> Comment_Blog Core.<$> (o Core..:? "id"))
  
  instance Core.ToJSON Comment_Blog where
    toJSON Comment_Blog {..} =
      Core.object (Core.catMaybes [("id" Core..=) Core.<$> id])
  
  -- | Data about the comment this is in reply to.
  --
  -- /See:/ 'newComment_InReplyTo' smart constructor.
  newtype Comment_InReplyTo = Comment_InReplyTo
    { -- | The identified of the parent of this comment.
      id :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Comment_InReplyTo' with the minimum fields required to make a request.
  newComment_InReplyTo ::
    Comment_InReplyTo
  newComment_InReplyTo = Comment_InReplyTo {id = Core.Nothing}
  
  instance Core.FromJSON Comment_InReplyTo where
    parseJSON =
      Core.withObject
        "Comment_InReplyTo"
        (\o -> Comment_InReplyTo Core.<$> (o Core..:? "id"))
  
  instance Core.ToJSON Comment_InReplyTo where
    toJSON Comment_InReplyTo {..} =
      Core.object (Core.catMaybes [("id" Core..=) Core.<$> id])
  
  -- | Data about the post containing this comment.
  --
  -- /See:/ 'newComment_Post' smart constructor.
  newtype Comment_Post = Comment_Post
    { -- | The identifier of the post containing this comment.
      id :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Comment_Post' with the minimum fields required to make a request.
  newComment_Post ::
    Comment_Post
  newComment_Post = Comment_Post {id = Core.Nothing}
  
  instance Core.FromJSON Comment_Post where
    parseJSON =
      Core.withObject
        "Comment_Post"
        (\o -> Comment_Post Core.<$> (o Core..:? "id"))
  
  instance Core.ToJSON Comment_Post where
    toJSON Comment_Post {..} =
      Core.object (Core.catMaybes [("id" Core..=) Core.<$> id])
  
  --
  -- /See:/ 'newCommentList' smart constructor.
  data CommentList = CommentList
    { -- | Etag of the response.
      etag :: (Core.Maybe Core.Text),
      -- | The List of Comments for a Post.
      items :: (Core.Maybe [Comment]),
      -- | The kind of this entry. Always blogger#commentList.
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to fetch the next page, if one exists.
      nextPageToken :: (Core.Maybe Core.Text),
      -- | Pagination token to fetch the previous page, if one exists.
      prevPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'CommentList' with the minimum fields required to make a request.
  newCommentList ::
    CommentList
  newCommentList =
    CommentList
      { etag = Core.Nothing,
        items = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing,
        prevPageToken = Core.Nothing
      }
  
  instance Core.FromJSON CommentList where
    parseJSON =
      Core.withObject
        "CommentList"
        ( \o ->
            CommentList
              Core.<$> (o Core..:? "etag")
              Core.<*> (o Core..:? "items")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
              Core.<*> (o Core..:? "prevPageToken")
        )
  
  instance Core.ToJSON CommentList where
    toJSON CommentList {..} =
      Core.object
        ( Core.catMaybes
            [ ("etag" Core..=) Core.<$> etag,
              ("items" Core..=) Core.<$> items,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken,
              ("prevPageToken" Core..=) Core.<$> prevPageToken
            ]
        )
  
  --
  -- /See:/ 'newPage' smart constructor.
  data Page = Page
    { -- | The author of this Page.
      author :: (Core.Maybe Page_Author),
      -- | Data about the blog containing this Page.
      blog :: (Core.Maybe Page_Blog),
      -- | The body content of this Page, in HTML.
      content :: (Core.Maybe Core.Text),
      -- | Etag of the resource.
      etag :: (Core.Maybe Core.Text),
      -- | The identifier for this resource.
      id :: (Core.Maybe Core.Text),
      -- | The kind of this entity. Always blogger#page.
      kind :: (Core.Maybe Core.Text),
      -- | RFC 3339 date-time when this Page was published.
      published :: (Core.Maybe Core.Text),
      -- | The API REST URL to fetch this resource from.
      selfLink :: (Core.Maybe Core.Text),
      -- | The status of the page for admin resources (either LIVE or DRAFT).
      status :: (Core.Maybe Page_Status),
      -- | The title of this entity. This is the name displayed in the Admin user interface.
      title :: (Core.Maybe Core.Text),
      -- | RFC 3339 date-time when this Page was trashed.
      trashed :: (Core.Maybe Core.Text),
      -- | RFC 3339 date-time when this Page was last updated.
      updated :: (Core.Maybe Core.Text),
      -- | The URL that this Page is displayed at.
      url :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Page' with the minimum fields required to make a request.
  newPage ::
    Page
  newPage =
    Page
      { author = Core.Nothing,
        blog = Core.Nothing,
        content = Core.Nothing,
        etag = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        published = Core.Nothing,
        selfLink = Core.Nothing,
        status = Core.Nothing,
        title = Core.Nothing,
        trashed = Core.Nothing,
        updated = Core.Nothing,
        url = Core.Nothing
      }
  
  instance Core.FromJSON Page where
    parseJSON =
      Core.withObject
        "Page"
        ( \o ->
            Page
              Core.<$> (o Core..:? "author")
              Core.<*> (o Core..:? "blog")
              Core.<*> (o Core..:? "content")
              Core.<*> (o Core..:? "etag")
              Core.<*> (o Core..:? "id")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "published")
              Core.<*> (o Core..:? "selfLink")
              Core.<*> (o Core..:? "status")
              Core.<*> (o Core..:? "title")
              Core.<*> (o Core..:? "trashed")
              Core.<*> (o Core..:? "updated")
              Core.<*> (o Core..:? "url")
        )
  
  instance Core.ToJSON Page where
    toJSON Page {..} =
      Core.object
        ( Core.catMaybes
            [ ("author" Core..=) Core.<$> author,
              ("blog" Core..=) Core.<$> blog,
              ("content" Core..=) Core.<$> content,
              ("etag" Core..=) Core.<$> etag,
              ("id" Core..=) Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("published" Core..=) Core.<$> published,
              ("selfLink" Core..=) Core.<$> selfLink,
              ("status" Core..=) Core.<$> status,
              ("title" Core..=) Core.<$> title,
              ("trashed" Core..=) Core.<$> trashed,
              ("updated" Core..=) Core.<$> updated,
              ("url" Core..=) Core.<$> url
            ]
        )
  
  -- | The author of this Page.
  --
  -- /See:/ 'newPage_Author' smart constructor.
  data Page_Author = Page_Author
    { -- | The display name.
      displayName :: (Core.Maybe Core.Text),
      -- | The identifier of the creator.
      id :: (Core.Maybe Core.Text),
      -- | The creator\'s avatar.
      image :: (Core.Maybe Page_Author_Image),
      -- | The URL of the creator\'s Profile page.
      url :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Page_Author' with the minimum fields required to make a request.
  newPage_Author ::
    Page_Author
  newPage_Author =
    Page_Author
      { displayName = Core.Nothing,
        id = Core.Nothing,
        image = Core.Nothing,
        url = Core.Nothing
      }
  
  instance Core.FromJSON Page_Author where
    parseJSON =
      Core.withObject
        "Page_Author"
        ( \o ->
            Page_Author
              Core.<$> (o Core..:? "displayName")
              Core.<*> (o Core..:? "id")
              Core.<*> (o Core..:? "image")
              Core.<*> (o Core..:? "url")
        )
  
  instance Core.ToJSON Page_Author where
    toJSON Page_Author {..} =
      Core.object
        ( Core.catMaybes
            [ ("displayName" Core..=) Core.<$> displayName,
              ("id" Core..=) Core.<$> id,
              ("image" Core..=) Core.<$> image,
              ("url" Core..=) Core.<$> url
            ]
        )
  
  -- | The creator\'s avatar.
  --
  -- /See:/ 'newPage_Author_Image' smart constructor.
  newtype Page_Author_Image = Page_Author_Image
    { -- | The creator\'s avatar URL.
      url :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Page_Author_Image' with the minimum fields required to make a request.
  newPage_Author_Image ::
    Page_Author_Image
  newPage_Author_Image = Page_Author_Image {url = Core.Nothing}
  
  instance Core.FromJSON Page_Author_Image where
    parseJSON =
      Core.withObject
        "Page_Author_Image"
        (\o -> Page_Author_Image Core.<$> (o Core..:? "url"))
  
  instance Core.ToJSON Page_Author_Image where
    toJSON Page_Author_Image {..} =
      Core.object (Core.catMaybes [("url" Core..=) Core.<$> url])
  
  -- | Data about the blog containing this Page.
  --
  -- /See:/ 'newPage_Blog' smart constructor.
  newtype Page_Blog = Page_Blog
    { -- | The identifier of the blog containing this page.
      id :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Page_Blog' with the minimum fields required to make a request.
  newPage_Blog ::
    Page_Blog
  newPage_Blog = Page_Blog {id = Core.Nothing}
  
  instance Core.FromJSON Page_Blog where
    parseJSON =
      Core.withObject
        "Page_Blog"
        (\o -> Page_Blog Core.<$> (o Core..:? "id"))
  
  instance Core.ToJSON Page_Blog where
    toJSON Page_Blog {..} =
      Core.object (Core.catMaybes [("id" Core..=) Core.<$> id])
  
  --
  -- /See:/ 'newPageList' smart constructor.
  data PageList = PageList
    { -- | Etag of the response.
      etag :: (Core.Maybe Core.Text),
      -- | The list of Pages for a Blog.
      items :: (Core.Maybe [Page]),
      -- | The kind of this entity. Always blogger#pageList.
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to fetch the next page, if one exists.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PageList' with the minimum fields required to make a request.
  newPageList ::
    PageList
  newPageList =
    PageList
      { etag = Core.Nothing,
        items = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON PageList where
    parseJSON =
      Core.withObject
        "PageList"
        ( \o ->
            PageList
              Core.<$> (o Core..:? "etag")
              Core.<*> (o Core..:? "items")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON PageList where
    toJSON PageList {..} =
      Core.object
        ( Core.catMaybes
            [ ("etag" Core..=) Core.<$> etag,
              ("items" Core..=) Core.<$> items,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  --
  -- /See:/ 'newPageviews' smart constructor.
  data Pageviews = Pageviews
    { -- | Blog Id.
      blogId :: (Core.Maybe Core.Text),
      -- | The container of posts in this blog.
      counts :: (Core.Maybe [Pageviews_CountsItem]),
      -- | The kind of this entry. Always blogger#page_views.
      kind :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Pageviews' with the minimum fields required to make a request.
  newPageviews ::
    Pageviews
  newPageviews =
    Pageviews
      { blogId = Core.Nothing,
        counts = Core.Nothing,
        kind = Core.Nothing
      }
  
  instance Core.FromJSON Pageviews where
    parseJSON =
      Core.withObject
        "Pageviews"
        ( \o ->
            Pageviews
              Core.<$> (o Core..:? "blogId")
              Core.<*> (o Core..:? "counts")
              Core.<*> (o Core..:? "kind")
        )
  
  instance Core.ToJSON Pageviews where
    toJSON Pageviews {..} =
      Core.object
        ( Core.catMaybes
            [ ("blogId" Core..=) Core.<$> blogId,
              ("counts" Core..=) Core.<$> counts,
              ("kind" Core..=) Core.<$> kind
            ]
        )
  
  --
  -- /See:/ 'newPageviews_CountsItem' smart constructor.
  data Pageviews_CountsItem = Pageviews_CountsItem
    { -- | Count of page views for the given time range.
      count :: (Core.Maybe Core.Int64),
      -- | Time range the given count applies to.
      timeRange :: (Core.Maybe Pageviews_CountsItem_TimeRange)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Pageviews_CountsItem' with the minimum fields required to make a request.
  newPageviews_CountsItem ::
    Pageviews_CountsItem
  newPageviews_CountsItem =
    Pageviews_CountsItem
      { count = Core.Nothing,
        timeRange = Core.Nothing
      }
  
  instance Core.FromJSON Pageviews_CountsItem where
    parseJSON =
      Core.withObject
        "Pageviews_CountsItem"
        ( \o ->
            Pageviews_CountsItem
              Core.<$> (o Core..:? "count" Core.<&> Core.fmap Core.fromAsText)
              Core.<*> (o Core..:? "timeRange")
        )
  
  instance Core.ToJSON Pageviews_CountsItem where
    toJSON Pageviews_CountsItem {..} =
      Core.object
        ( Core.catMaybes
            [ ("count" Core..=) Core.. Core.AsText Core.<$> count,
              ("timeRange" Core..=) Core.<$> timeRange
            ]
        )
  
  --
  -- /See:/ 'newPost' smart constructor.
  data Post' = Post'
    { -- | The author of this Post.
      author :: (Core.Maybe Post_Author),
      -- | Data about the blog containing this Post.
      blog :: (Core.Maybe Post_Blog),
      -- | The content of the Post. May contain HTML markup.
      content :: (Core.Maybe Core.Text),
      -- | The JSON meta-data for the Post.
      customMetaData :: (Core.Maybe Core.Text),
      -- | Etag of the resource.
      etag :: (Core.Maybe Core.Text),
      -- | The identifier of this Post.
      id :: (Core.Maybe Core.Text),
      -- | Display image for the Post.
      images :: (Core.Maybe [Post_ImagesItem]),
      -- | The kind of this entity. Always blogger#post.
      kind :: (Core.Maybe Core.Text),
      -- | The list of labels this Post was tagged with.
      labels :: (Core.Maybe [Core.Text]),
      -- | The location for geotagged posts.
      location :: (Core.Maybe Post_Location),
      -- | RFC 3339 date-time when this Post was published.
      published :: (Core.Maybe Core.Text),
      -- | Comment control and display setting for readers of this post.
      readerComments :: (Core.Maybe Post_ReaderComments),
      -- | The container of comments on this Post.
      replies :: (Core.Maybe Post_Replies),
      -- | The API REST URL to fetch this resource from.
      selfLink :: (Core.Maybe Core.Text),
      -- | Status of the post. Only set for admin-level requests.
      status :: (Core.Maybe Post_Status),
      -- | The title of the Post.
      title :: (Core.Maybe Core.Text),
      -- | The title link URL, similar to atom\'s related link.
      titleLink :: (Core.Maybe Core.Text),
      -- | RFC 3339 date-time when this Post was last trashed.
      trashed :: (Core.Maybe Core.Text),
      -- | RFC 3339 date-time when this Post was last updated.
      updated :: (Core.Maybe Core.Text),
      -- | The URL where this Post is displayed.
      url :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Post' with the minimum fields required to make a request.
  newPost ::
    Post'
  newPost =
    Post'
      { author = Core.Nothing,
        blog = Core.Nothing,
        content = Core.Nothing,
        customMetaData = Core.Nothing,
        etag = Core.Nothing,
        id = Core.Nothing,
        images = Core.Nothing,
        kind = Core.Nothing,
        labels = Core.Nothing,
        location = Core.Nothing,
        published = Core.Nothing,
        readerComments = Core.Nothing,
        replies = Core.Nothing,
        selfLink = Core.Nothing,
        status = Core.Nothing,
        title = Core.Nothing,
        titleLink = Core.Nothing,
        trashed = Core.Nothing,
        updated = Core.Nothing,
        url = Core.Nothing
      }
  
  instance Core.FromJSON Post' where
    parseJSON =
      Core.withObject
        "Post'"
        ( \o ->
            Post'
              Core.<$> (o Core..:? "author")
              Core.<*> (o Core..:? "blog")
              Core.<*> (o Core..:? "content")
              Core.<*> (o Core..:? "customMetaData")
              Core.<*> (o Core..:? "etag")
              Core.<*> (o Core..:? "id")
              Core.<*> (o Core..:? "images")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "labels")
              Core.<*> (o Core..:? "location")
              Core.<*> (o Core..:? "published")
              Core.<*> (o Core..:? "readerComments")
              Core.<*> (o Core..:? "replies")
              Core.<*> (o Core..:? "selfLink")
              Core.<*> (o Core..:? "status")
              Core.<*> (o Core..:? "title")
              Core.<*> (o Core..:? "titleLink")
              Core.<*> (o Core..:? "trashed")
              Core.<*> (o Core..:? "updated")
              Core.<*> (o Core..:? "url")
        )
  
  instance Core.ToJSON Post' where
    toJSON Post' {..} =
      Core.object
        ( Core.catMaybes
            [ ("author" Core..=) Core.<$> author,
              ("blog" Core..=) Core.<$> blog,
              ("content" Core..=) Core.<$> content,
              ("customMetaData" Core..=) Core.<$> customMetaData,
              ("etag" Core..=) Core.<$> etag,
              ("id" Core..=) Core.<$> id,
              ("images" Core..=) Core.<$> images,
              ("kind" Core..=) Core.<$> kind,
              ("labels" Core..=) Core.<$> labels,
              ("location" Core..=) Core.<$> location,
              ("published" Core..=) Core.<$> published,
              ("readerComments" Core..=) Core.<$> readerComments,
              ("replies" Core..=) Core.<$> replies,
              ("selfLink" Core..=) Core.<$> selfLink,
              ("status" Core..=) Core.<$> status,
              ("title" Core..=) Core.<$> title,
              ("titleLink" Core..=) Core.<$> titleLink,
              ("trashed" Core..=) Core.<$> trashed,
              ("updated" Core..=) Core.<$> updated,
              ("url" Core..=) Core.<$> url
            ]
        )
  
  -- | The author of this Post.
  --
  -- /See:/ 'newPost_Author' smart constructor.
  data Post_Author = Post_Author
    { -- | The display name.
      displayName :: (Core.Maybe Core.Text),
      -- | The identifier of the creator.
      id :: (Core.Maybe Core.Text),
      -- | The creator\'s avatar.
      image :: (Core.Maybe Post_Author_Image),
      -- | The URL of the creator\'s Profile page.
      url :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Post_Author' with the minimum fields required to make a request.
  newPost_Author ::
    Post_Author
  newPost_Author =
    Post_Author
      { displayName = Core.Nothing,
        id = Core.Nothing,
        image = Core.Nothing,
        url = Core.Nothing
      }
  
  instance Core.FromJSON Post_Author where
    parseJSON =
      Core.withObject
        "Post_Author"
        ( \o ->
            Post_Author
              Core.<$> (o Core..:? "displayName")
              Core.<*> (o Core..:? "id")
              Core.<*> (o Core..:? "image")
              Core.<*> (o Core..:? "url")
        )
  
  instance Core.ToJSON Post_Author where
    toJSON Post_Author {..} =
      Core.object
        ( Core.catMaybes
            [ ("displayName" Core..=) Core.<$> displayName,
              ("id" Core..=) Core.<$> id,
              ("image" Core..=) Core.<$> image,
              ("url" Core..=) Core.<$> url
            ]
        )
  
  -- | The creator\'s avatar.
  --
  -- /See:/ 'newPost_Author_Image' smart constructor.
  newtype Post_Author_Image = Post_Author_Image
    { -- | The creator\'s avatar URL.
      url :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Post_Author_Image' with the minimum fields required to make a request.
  newPost_Author_Image ::
    Post_Author_Image
  newPost_Author_Image = Post_Author_Image {url = Core.Nothing}
  
  instance Core.FromJSON Post_Author_Image where
    parseJSON =
      Core.withObject
        "Post_Author_Image"
        (\o -> Post_Author_Image Core.<$> (o Core..:? "url"))
  
  instance Core.ToJSON Post_Author_Image where
    toJSON Post_Author_Image {..} =
      Core.object (Core.catMaybes [("url" Core..=) Core.<$> url])
  
  -- | Data about the blog containing this Post.
  --
  -- /See:/ 'newPost_Blog' smart constructor.
  newtype Post_Blog = Post_Blog
    { -- | The identifier of the Blog that contains this Post.
      id :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Post_Blog' with the minimum fields required to make a request.
  newPost_Blog ::
    Post_Blog
  newPost_Blog = Post_Blog {id = Core.Nothing}
  
  instance Core.FromJSON Post_Blog where
    parseJSON =
      Core.withObject
        "Post_Blog"
        (\o -> Post_Blog Core.<$> (o Core..:? "id"))
  
  instance Core.ToJSON Post_Blog where
    toJSON Post_Blog {..} =
      Core.object (Core.catMaybes [("id" Core..=) Core.<$> id])
  
  --
  -- /See:/ 'newPost_ImagesItem' smart constructor.
  newtype Post_ImagesItem = Post_ImagesItem
    { url :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Post_ImagesItem' with the minimum fields required to make a request.
  newPost_ImagesItem ::
    Post_ImagesItem
  newPost_ImagesItem = Post_ImagesItem {url = Core.Nothing}
  
  instance Core.FromJSON Post_ImagesItem where
    parseJSON =
      Core.withObject
        "Post_ImagesItem"
        (\o -> Post_ImagesItem Core.<$> (o Core..:? "url"))
  
  instance Core.ToJSON Post_ImagesItem where
    toJSON Post_ImagesItem {..} =
      Core.object (Core.catMaybes [("url" Core..=) Core.<$> url])
  
  -- | The location for geotagged posts.
  --
  -- /See:/ 'newPost_Location' smart constructor.
  data Post_Location = Post_Location
    { -- | Location\'s latitude.
      lat :: (Core.Maybe Core.Double),
      -- | Location\'s longitude.
      lng :: (Core.Maybe Core.Double),
      -- | Location name.
      name :: (Core.Maybe Core.Text),
      -- | Location\'s viewport span. Can be used when rendering a map preview.
      span :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Post_Location' with the minimum fields required to make a request.
  newPost_Location ::
    Post_Location
  newPost_Location =
    Post_Location
      { lat = Core.Nothing,
        lng = Core.Nothing,
        name = Core.Nothing,
        span = Core.Nothing
      }
  
  instance Core.FromJSON Post_Location where
    parseJSON =
      Core.withObject
        "Post_Location"
        ( \o ->
            Post_Location
              Core.<$> (o Core..:? "lat")
              Core.<*> (o Core..:? "lng")
              Core.<*> (o Core..:? "name")
              Core.<*> (o Core..:? "span")
        )
  
  instance Core.ToJSON Post_Location where
    toJSON Post_Location {..} =
      Core.object
        ( Core.catMaybes
            [ ("lat" Core..=) Core.<$> lat,
              ("lng" Core..=) Core.<$> lng,
              ("name" Core..=) Core.<$> name,
              ("span" Core..=) Core.<$> span
            ]
        )
  
  -- | The container of comments on this Post.
  --
  -- /See:/ 'newPost_Replies' smart constructor.
  data Post_Replies = Post_Replies
    { -- | The List of Comments for this Post.
      items :: (Core.Maybe [Comment]),
      -- | The URL of the comments on this post.
      selfLink :: (Core.Maybe Core.Text),
      -- | The count of comments on this post.
      totalItems :: (Core.Maybe Core.Int64)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'Post_Replies' with the minimum fields required to make a request.
  newPost_Replies ::
    Post_Replies
  newPost_Replies =
    Post_Replies
      { items = Core.Nothing,
        selfLink = Core.Nothing,
        totalItems = Core.Nothing
      }
  
  instance Core.FromJSON Post_Replies where
    parseJSON =
      Core.withObject
        "Post_Replies"
        ( \o ->
            Post_Replies
              Core.<$> (o Core..:? "items")
              Core.<*> (o Core..:? "selfLink")
              Core.<*> (o Core..:? "totalItems" Core.<&> Core.fmap Core.fromAsText)
        )
  
  instance Core.ToJSON Post_Replies where
    toJSON Post_Replies {..} =
      Core.object
        ( Core.catMaybes
            [ ("items" Core..=) Core.<$> items,
              ("selfLink" Core..=) Core.<$> selfLink,
              ("totalItems" Core..=) Core.. Core.AsText Core.<$> totalItems
            ]
        )
  
  --
  -- /See:/ 'newPostList' smart constructor.
  data PostList = PostList
    { -- | Etag of the response.
      etag :: (Core.Maybe Core.Text),
      -- | The list of Posts for this Blog.
      items :: (Core.Maybe [Post']),
      -- | The kind of this entity. Always blogger#postList.
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to fetch the next page, if one exists.
      nextPageToken :: (Core.Maybe Core.Text),
      -- | Pagination token to fetch the previous page, if one exists.
      prevPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PostList' with the minimum fields required to make a request.
  newPostList ::
    PostList
  newPostList =
    PostList
      { etag = Core.Nothing,
        items = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing,
        prevPageToken = Core.Nothing
      }
  
  instance Core.FromJSON PostList where
    parseJSON =
      Core.withObject
        "PostList"
        ( \o ->
            PostList
              Core.<$> (o Core..:? "etag")
              Core.<*> (o Core..:? "items")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
              Core.<*> (o Core..:? "prevPageToken")
        )
  
  instance Core.ToJSON PostList where
    toJSON PostList {..} =
      Core.object
        ( Core.catMaybes
            [ ("etag" Core..=) Core.<$> etag,
              ("items" Core..=) Core.<$> items,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken,
              ("prevPageToken" Core..=) Core.<$> prevPageToken
            ]
        )
  
  --
  -- /See:/ 'newPostPerUserInfo' smart constructor.
  data PostPerUserInfo = PostPerUserInfo
    { -- | ID of the Blog that the post resource belongs to.
      blogId :: (Core.Maybe Core.Text),
      -- | True if the user has Author level access to the post.
      hasEditAccess :: (Core.Maybe Core.Bool),
      -- | The kind of this entity. Always blogger#postPerUserInfo.
      kind :: (Core.Maybe Core.Text),
      -- | ID of the Post resource.
      postId :: (Core.Maybe Core.Text),
      -- | ID of the User.
      userId :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PostPerUserInfo' with the minimum fields required to make a request.
  newPostPerUserInfo ::
    PostPerUserInfo
  newPostPerUserInfo =
    PostPerUserInfo
      { blogId = Core.Nothing,
        hasEditAccess = Core.Nothing,
        kind = Core.Nothing,
        postId = Core.Nothing,
        userId = Core.Nothing
      }
  
  instance Core.FromJSON PostPerUserInfo where
    parseJSON =
      Core.withObject
        "PostPerUserInfo"
        ( \o ->
            PostPerUserInfo
              Core.<$> (o Core..:? "blogId")
              Core.<*> (o Core..:? "hasEditAccess")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "postId")
              Core.<*> (o Core..:? "userId")
        )
  
  instance Core.ToJSON PostPerUserInfo where
    toJSON PostPerUserInfo {..} =
      Core.object
        ( Core.catMaybes
            [ ("blogId" Core..=) Core.<$> blogId,
              ("hasEditAccess" Core..=) Core.<$> hasEditAccess,
              ("kind" Core..=) Core.<$> kind,
              ("postId" Core..=) Core.<$> postId,
              ("userId" Core..=) Core.<$> userId
            ]
        )
  
  --
  -- /See:/ 'newPostUserInfo' smart constructor.
  data PostUserInfo = PostUserInfo
    { -- | The kind of this entity. Always blogger#postUserInfo.
      kind :: (Core.Maybe Core.Text),
      -- | The Post resource.
      post :: (Core.Maybe Post'),
      -- | Information about a User for the Post.
      postUserInfo :: (Core.Maybe PostPerUserInfo)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PostUserInfo' with the minimum fields required to make a request.
  newPostUserInfo ::
    PostUserInfo
  newPostUserInfo =
    PostUserInfo
      { kind = Core.Nothing,
        post = Core.Nothing,
        postUserInfo = Core.Nothing
      }
  
  instance Core.FromJSON PostUserInfo where
    parseJSON =
      Core.withObject
        "PostUserInfo"
        ( \o ->
            PostUserInfo
              Core.<$> (o Core..:? "kind")
              Core.<*> (o Core..:? "post")
              Core.<*> (o Core..:? "post_user_info")
        )
  
  instance Core.ToJSON PostUserInfo where
    toJSON PostUserInfo {..} =
      Core.object
        ( Core.catMaybes
            [ ("kind" Core..=) Core.<$> kind,
              ("post" Core..=) Core.<$> post,
              ("post_user_info" Core..=) Core.<$> postUserInfo
            ]
        )
  
  --
  -- /See:/ 'newPostUserInfosList' smart constructor.
  data PostUserInfosList = PostUserInfosList
    { -- | The list of Posts with User information for the post, for this Blog.
      items :: (Core.Maybe [PostUserInfo]),
      -- | The kind of this entity. Always blogger#postList.
      kind :: (Core.Maybe Core.Text),
      -- | Pagination token to fetch the next page, if one exists.
      nextPageToken :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'PostUserInfosList' with the minimum fields required to make a request.
  newPostUserInfosList ::
    PostUserInfosList
  newPostUserInfosList =
    PostUserInfosList
      { items = Core.Nothing,
        kind = Core.Nothing,
        nextPageToken = Core.Nothing
      }
  
  instance Core.FromJSON PostUserInfosList where
    parseJSON =
      Core.withObject
        "PostUserInfosList"
        ( \o ->
            PostUserInfosList
              Core.<$> (o Core..:? "items")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "nextPageToken")
        )
  
  instance Core.ToJSON PostUserInfosList where
    toJSON PostUserInfosList {..} =
      Core.object
        ( Core.catMaybes
            [ ("items" Core..=) Core.<$> items,
              ("kind" Core..=) Core.<$> kind,
              ("nextPageToken" Core..=) Core.<$> nextPageToken
            ]
        )
  
  --
  -- /See:/ 'newUser' smart constructor.
  data User = User
    { -- | Profile summary information.
      about :: (Core.Maybe Core.Text),
      -- | The container of blogs for this user.
      blogs :: (Core.Maybe User_Blogs),
      -- | The timestamp of when this profile was created, in seconds since epoch.
      created :: (Core.Maybe Core.Text),
      -- | The display name.
      displayName :: (Core.Maybe Core.Text),
      -- | The identifier for this User.
      id :: (Core.Maybe Core.Text),
      -- | The kind of this entity. Always blogger#user.
      kind :: (Core.Maybe Core.Text),
      -- | This user\'s locale
      locale :: (Core.Maybe User_Locale),
      -- | The API REST URL to fetch this resource from.
      selfLink :: (Core.Maybe Core.Text),
      -- | The user\'s profile page.
      url :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'User' with the minimum fields required to make a request.
  newUser ::
    User
  newUser =
    User
      { about = Core.Nothing,
        blogs = Core.Nothing,
        created = Core.Nothing,
        displayName = Core.Nothing,
        id = Core.Nothing,
        kind = Core.Nothing,
        locale = Core.Nothing,
        selfLink = Core.Nothing,
        url = Core.Nothing
      }
  
  instance Core.FromJSON User where
    parseJSON =
      Core.withObject
        "User"
        ( \o ->
            User
              Core.<$> (o Core..:? "about")
              Core.<*> (o Core..:? "blogs")
              Core.<*> (o Core..:? "created")
              Core.<*> (o Core..:? "displayName")
              Core.<*> (o Core..:? "id")
              Core.<*> (o Core..:? "kind")
              Core.<*> (o Core..:? "locale")
              Core.<*> (o Core..:? "selfLink")
              Core.<*> (o Core..:? "url")
        )
  
  instance Core.ToJSON User where
    toJSON User {..} =
      Core.object
        ( Core.catMaybes
            [ ("about" Core..=) Core.<$> about,
              ("blogs" Core..=) Core.<$> blogs,
              ("created" Core..=) Core.<$> created,
              ("displayName" Core..=) Core.<$> displayName,
              ("id" Core..=) Core.<$> id,
              ("kind" Core..=) Core.<$> kind,
              ("locale" Core..=) Core.<$> locale,
              ("selfLink" Core..=) Core.<$> selfLink,
              ("url" Core..=) Core.<$> url
            ]
        )
  
  -- | The container of blogs for this user.
  --
  -- /See:/ 'newUser_Blogs' smart constructor.
  newtype User_Blogs = User_Blogs
    { -- | The URL of the Blogs for this user.
      selfLink :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'User_Blogs' with the minimum fields required to make a request.
  newUser_Blogs ::
    User_Blogs
  newUser_Blogs = User_Blogs {selfLink = Core.Nothing}
  
  instance Core.FromJSON User_Blogs where
    parseJSON =
      Core.withObject
        "User_Blogs"
        (\o -> User_Blogs Core.<$> (o Core..:? "selfLink"))
  
  instance Core.ToJSON User_Blogs where
    toJSON User_Blogs {..} =
      Core.object
        (Core.catMaybes [("selfLink" Core..=) Core.<$> selfLink])
  
  -- | This user\'s locale
  --
  -- /See:/ 'newUser_Locale' smart constructor.
  data User_Locale = User_Locale
    { -- | The country this blog\'s locale is set to.
      country :: (Core.Maybe Core.Text),
      -- | The language this blog is authored in.
      language :: (Core.Maybe Core.Text),
      -- | The language variant this blog is authored in.
      variant :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'User_Locale' with the minimum fields required to make a request.
  newUser_Locale ::
    User_Locale
  newUser_Locale =
    User_Locale
      { country = Core.Nothing,
        language = Core.Nothing,
        variant = Core.Nothing
      }
  
  instance Core.FromJSON User_Locale where
    parseJSON =
      Core.withObject
        "User_Locale"
        ( \o ->
            User_Locale
              Core.<$> (o Core..:? "country")
              Core.<*> (o Core..:? "language")
              Core.<*> (o Core..:? "variant")
        )
  
  instance Core.ToJSON User_Locale where
    toJSON User_Locale {..} =
      Core.object
        ( Core.catMaybes
            [ ("country" Core..=) Core.<$> country,
              ("language" Core..=) Core.<$> language,
              ("variant" Core..=) Core.<$> variant
            ]
        )
  