/*
* Copyright (c) 2023 PANTHEON.tech, s.r.o. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.restconf.server.api;
import java.net.URI;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.restconf.api.ApiPath;
import org.opendaylight.restconf.common.errors.RestconfFuture;
import org.opendaylight.restconf.nb.rfc8040.databind.OperationInputBody;
import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
import org.opendaylight.restconf.server.spi.OperationOutput;
/**
* An implementation of a RESTCONF server, implementing the
* RESTCONF API Resource.
*/
@NonNullByDefault
public interface RestconfServer {
/**
* Return the revision of {@code ietf-yang-library} module implemented by this server, as defined in
* RFC8040 {+restconf}/yang-library-version.
*
* @return A {@code yang-library-version} element
*/
// FIXME: this is a simple coning-variadic return, similar to how OperationsContent is handled use a common
// construct for both cases
// FIXME: RestconfFuture if we transition to being used by restconf-client implementation
NormalizedNodePayload yangLibraryVersionGET();
/**
* Return the set of supported RPCs supported by {@link #operationsPOST(URI, String, OperationInputBody)}.
*
* @return An {@link OperationsContent}
*/
OperationsContent operationsGET();
/*
* Return the details about a particular operation supported by
* {@link #operationsPOST(URI, String, OperationInputBody)}, as expressed in the
* RFC8040 Operation Resource.
*
* @param restconfURI Base URI of the request
* @param operation {@code } path, really an {@link ApiPath} to an {@code rpc}
* @param body RPC operation
* @return A {@link RestconfFuture} of the {@link OperationOutput operation result}
*/
// FIXME: 'operation' should really be an ApiIdentifier with non-null module, but we also support ang-ext:mount,
// and hence it is a path right now
// FIXME: use ApiPath instead of String
RestconfFuture operationsPOST(URI restconfURI, String operation, OperationInputBody body);
}