@Override
  public Snapshot createSnapshot(
      CreateSnapshotRequest request, ResultCapture<CreateSnapshotResult> extractor) {

    ActionResult result = resource.performAction("CreateSnapshot", request, extractor);

    if (result == null) return null;
    return new SnapshotImpl(result.getResource());
  }
  @Override
  public List<com.amazonaws.resources.ec2.Tag> createTags(
      CreateTagsRequest request, ResultCapture<Void> extractor) {

    ActionResult result = resource.performAction("CreateTags", request, extractor);

    if (result == null) return null;
    return CodecUtils.transform(result.getResources(), TagImpl.CODEC);
  }
  @Override
  public AttachVolumeResult attachToInstance(
      AttachVolumeRequest request, ResultCapture<AttachVolumeResult> extractor) {

    ActionResult result = resource.performAction("AttachToInstance", request, extractor);

    if (result == null) return null;
    return (AttachVolumeResult) result.getData();
  }
  @Override
  public DescribeVolumeStatusResult describeStatus(
      DescribeVolumeStatusRequest request, ResultCapture<DescribeVolumeStatusResult> extractor) {

    ActionResult result = resource.performAction("DescribeStatus", request, extractor);

    if (result == null) return null;
    return (DescribeVolumeStatusResult) result.getData();
  }
  @Override
  public DetachVolumeResult detachFromInstance(
      DetachVolumeRequest request, ResultCapture<DetachVolumeResult> extractor) {

    ActionResult result = resource.performAction("DetachFromInstance", request, extractor);

    if (result == null) return null;
    return (DetachVolumeResult) result.getData();
  }