mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-26 04:22:07 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			55 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2022, Tim Flynn <trflynn89@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/JsonValue.h>
 | |
| #include <AK/Variant.h>
 | |
| #include <LibIPC/Forward.h>
 | |
| #include <LibWeb/WebDriver/Error.h>
 | |
| 
 | |
| namespace Web::WebDriver {
 | |
| 
 | |
| // FIXME: Ideally, this could be `using Response = ErrorOr<JsonValue, Error>`, but that won't be
 | |
| //        default-constructible, which is a requirement for the generated IPC.
 | |
| struct [[nodiscard]] Response {
 | |
|     Response() = default;
 | |
|     Response(JsonValue&&);
 | |
|     Response(Error&&);
 | |
| 
 | |
|     JsonValue& value() { return m_value_or_error.template get<JsonValue>(); }
 | |
|     JsonValue const& value() const { return m_value_or_error.template get<JsonValue>(); }
 | |
| 
 | |
|     Error& error() { return m_value_or_error.template get<Error>(); }
 | |
|     Error const& error() const { return m_value_or_error.template get<Error>(); }
 | |
| 
 | |
|     bool is_error() const { return m_value_or_error.template has<Error>(); }
 | |
| 
 | |
|     JsonValue release_value() { return move(value()); }
 | |
|     Error release_error() { return move(error()); }
 | |
| 
 | |
|     template<typename... Visitors>
 | |
|     decltype(auto) visit(Visitors&&... visitors) const
 | |
|     {
 | |
|         return m_value_or_error.visit(forward<Visitors>(visitors)...);
 | |
|     }
 | |
| 
 | |
| private:
 | |
|     // Note: Empty is only a possible state until the Response has been decoded by IPC.
 | |
|     Variant<Empty, JsonValue, Error> m_value_or_error;
 | |
| };
 | |
| 
 | |
| }
 | |
| 
 | |
| namespace IPC {
 | |
| 
 | |
| template<>
 | |
| ErrorOr<void> encode(Encoder&, Web::WebDriver::Response const&);
 | |
| 
 | |
| template<>
 | |
| ErrorOr<Web::WebDriver::Response> decode(Decoder&);
 | |
| 
 | |
| }
 | 
