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

#include "garnet/bin/zxdb/client/job_impl.h"

#include "garnet/bin/zxdb/client/job_context_impl.h"

namespace zxdb {

JobImpl::JobImpl(JobContextImpl* job_context, uint64_t koid,
                 const std::string& name)
    : Job(job_context->session()),
      job_context_(job_context),
      koid_(koid),
      name_(name),
      weak_factory_(this) {}

JobImpl::~JobImpl() {}

JobContext* JobImpl::GetJobContext() const { return job_context_; }

uint64_t JobImpl::GetKoid() const { return koid_; }

const std::string& JobImpl::GetName() const { return name_; }

}  // namespace zxdb
