summaryrefslogtreecommitdiff
path: root/src/interfaces/mount_point_state_machine.hpp
blob: db521fb8700daa4b49f15e13c0b7e5a4912531ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#pragma once

#include "configuration.hpp"
#include "resources.hpp"

struct BasicState;

namespace interfaces
{

struct MountPointStateMachine
{
    struct Target
    {
        std::string imgUrl;
        bool rw;
        std::unique_ptr<resource::Mount> mountPoint;
        std::unique_ptr<utils::CredentialsProvider> credentials;
    };

    virtual ~MountPointStateMachine() = default;

    virtual std::string_view getName() const = 0;
    virtual Configuration::MountPoint& getConfig() = 0;
    virtual std::optional<Target>& getTarget() = 0;
    virtual BasicState& getState() = 0;
    virtual int& getExitCode() = 0;
    virtual boost::asio::io_context& getIoc() = 0;

    virtual void emitRegisterDBusEvent(
        std::shared_ptr<sdbusplus::asio::connection> bus,
        std::shared_ptr<sdbusplus::asio::object_server> objServer) = 0;
    virtual void emitMountEvent(std::optional<Target>) = 0;
    virtual void emitUnmountEvent() = 0;
    virtual void emitSubprocessStoppedEvent() = 0;
    virtual void emitUdevStateChangeEvent(const NBDDevice& dev,
                                          StateChange devState) = 0;
};

} // namespace interfaces