/*
 * Copyright 2026 Google LLC.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
#ifndef SkJpegRustDecoder_DEFINED
#define SkJpegRustDecoder_DEFINED

#include "include/codec/SkCodec.h"
#include "include/core/SkRefCnt.h"
#include "include/private/SkAPI.h"

class SkData;
class SkStream;

#include <memory>

namespace SkJpegRustDecoder {

/** Returns true if this data claims to be a JPEG image. */
SK_API bool IsJpeg(const void*, size_t);

/**
 *  Attempts to decode the given bytes as a JPEG using Rust implementation.
 *
 *  If the bytes are not a JPEG, returns nullptr.
 */
SK_API std::unique_ptr<SkCodec> Decode(std::unique_ptr<SkStream>,
                                       SkCodec::Result*,
                                       SkCodecs::DecodeContext = nullptr);
SK_API std::unique_ptr<SkCodec> Decode(sk_sp<const SkData>,
                                       SkCodec::Result*,
                                       SkCodecs::DecodeContext = nullptr);

inline constexpr SkCodecs::Decoder Decoder() {
    return { "rust_jpeg", IsJpeg, Decode };
}

}  // namespace SkJpegRustDecoder

#endif  // SkJpegRustDecoder_DEFINED
