// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SHILL_ETHERNET_ETHERNET_TEMPORARY_SERVICE_H_
#define SHILL_ETHERNET_ETHERNET_TEMPORARY_SERVICE_H_

#include <string>

#include "shill/service.h"

namespace shill {

class Manager;

// This is only use for loading non-active Ethernet service entries from the
// profile.
class EthernetTemporaryService : public Service {
 public:
  EthernetTemporaryService(Manager* manager,
                           const std::string& storage_identifier);
  ~EthernetTemporaryService() override;

  // Inherited from Service.
  RpcIdentifier GetDeviceRpcId(Error* error) const override;
  std::string GetStorageIdentifier() const override;
  bool IsVisible() const override;

 protected:
  // Inherited from Service.
  void OnConnect(Error* /*error*/) override {}
  void OnDisconnect(Error* /*error*/, const char* /*reason*/) override {}

 private:
  std::string storage_identifier_;
  DISALLOW_COPY_AND_ASSIGN(EthernetTemporaryService);
};

}  // namespace shill

#endif  // SHILL_ETHERNET_ETHERNET_TEMPORARY_SERVICE_H_
