// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.

import FuzzCommon
import Thrift

@_cdecl("LLVMFuzzerTestOneInput")
public func testOneInput(_ start: UnsafeRawPointer, _ count: Int) -> Int32 {
    _ = parseObjectWithProtocol(start: start, count: count, protocolType: TBinaryProtocol.self)
    return 0
}

@main
public struct FuzzParseBinary {
    public static func main() {
        runLibFuzzerDriver(testOneInput: testOneInput)
    }
}