// Generated by Create API
// https://github.com/CreateAPI/CreateAPI

import Foundation

public struct GenericFeedItemSchema: Codable, Equatable {
    public var contentId: String
    public var contentItem: ContentItem
    /// GenericFeedItemContentType
    public var contentType: GenericFeedItemContentType
    public var contentVariantKey: String
    public var feedItemId: String
    /// GenericFeedItemLoggingContext
    public var loggingContext: GenericFeedItemLoggingContext

    public struct ContentItem: Codable, Equatable {
        public var generatedClipSchema: GeneratedClipSchema?
        public var videoHookSchema: VideoHookSchema?

        public init(generatedClipSchema: GeneratedClipSchema? = nil, videoHookSchema: VideoHookSchema? = nil) {
            self.generatedClipSchema = generatedClipSchema
            self.videoHookSchema = videoHookSchema
        }

        public init(from decoder: Decoder) throws {
            let container = try decoder.singleValueContainer()
            self.generatedClipSchema = try? container.decode(GeneratedClipSchema.self)
            self.videoHookSchema = try? container.decode(VideoHookSchema.self)
        }

        public func encode(to encoder: Encoder) throws {
            var container = encoder.singleValueContainer()
            if let value = generatedClipSchema { try container.encode(value) }
            if let value = videoHookSchema { try container.encode(value) }
        }
    }

    public init(contentId: String, contentItem: ContentItem, contentType: GenericFeedItemContentType, contentVariantKey: String, feedItemId: String, loggingContext: GenericFeedItemLoggingContext) {
        self.contentId = contentId
        self.contentItem = contentItem
        self.contentType = contentType
        self.contentVariantKey = contentVariantKey
        self.feedItemId = feedItemId
        self.loggingContext = loggingContext
    }
}
