/*
 * Copyright (C) 2025 Fastly, Inc.
 *
 * Licensed 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.
 */

#ifndef EVENT_H
#define EVENT_H

#include "rust/bindings.h"

class EventLoop;

namespace Event {

enum Interest
{
	Readable = ffi::READABLE,
	Writable = ffi::WRITABLE,
};

class SetReadiness
{
public:
	~SetReadiness();

	// disable copying
	SetReadiness(const SetReadiness &) = delete;
	SetReadiness & operator=(const SetReadiness &) = delete;

	// pass a non-zero set of Interest flags
	int setReadiness(uint8_t readiness);

private:
	friend class ::EventLoop;

	SetReadiness(ffi::SetReadiness *inner);

	ffi::SetReadiness *inner_;
};

}

#endif
