class ShouldHaveDuration extends BasicErrorMessageFactory {

  private static final String EXPECTED_PREFIX = "%n"
                                                + "Expecting Duration:%n"
                                                + "  %s%n"
                                                + "to have %s ";

  public static ShouldHaveDuration shouldHaveNanos(Duration actual, long actualNanos, long expectedNanos) {
    String metric;
    if (expectedNanos == 1 || expectedNanos == -1) {
      metric = "nano";
    } else {
      metric = "nanos";
    }
    return new ShouldHaveDuration(actual, actualNanos, expectedNanos, metric);
  }

  public static ShouldHaveDuration shouldHaveMillis(Duration actual, long actualMillis, long expectedMillis) {
    String metric;
    if (expectedMillis == 1 || expectedMillis == -1) {
      metric = "milli";
    } else {
      metric = "millis";
    }
    return new ShouldHaveDuration(actual, actualMillis, expectedMillis, metric);
  }

  public static ShouldHaveDuration shouldHaveSeconds(Duration actual, long actualSeconds, long expectedSeconds) {
    String metric;
    if (expectedSeconds == 1 || expectedSeconds == -1) {
      metric = "second";
    } else {
      metric = "seconds";
    }
    return new ShouldHaveDuration(actual, actualSeconds, expectedSeconds, metric);
  }

  public static ShouldHaveDuration shouldHaveMinutes(Duration actual, long actualMinutes, long expectedMinutes) {
    String metric;
    if (expectedMinutes == 1 || expectedMinutes == -1) {
      metric = "minute";
    } else {
      metric = "minutes";
    }
    return new ShouldHaveDuration(actual, actualMinutes, expectedMinutes, metric);
  }

  public static ShouldHaveDuration shouldHaveHours(Duration actual, long actualHours, long expectedHours) {
    String metric;
    if (expectedHours == 1 || expectedHours == -1) {
      metric = "hour";
    } else {
      metric = "hours";
    }
    return new ShouldHaveDuration(actual, actualHours, expectedHours, metric);
  }

  public static ShouldHaveDuration shouldHaveDays(Duration actual, long actualDays, long expectedDays) {<FILL_FUNCTION_BODY>}

  private ShouldHaveDuration(Duration actual, long actualSpecific, long expectedSpecific, String metric) {
    super(EXPECTED_PREFIX + metric + " but had %s", actual, expectedSpecific, actualSpecific);
  }
}

    String metric;
    if (expectedDays == 1 || expectedDays == -1) {
      metric = "day";
    } else {
      metric = "days";
    }
    return new ShouldHaveDuration(actual, actualDays, expectedDays, metric);
  
<methods>public transient void <init>(java.lang.String, java.lang.Object[]) ,public java.lang.String create(org.assertj.core.description.Description, org.assertj.core.presentation.Representation) ,public java.lang.String create(org.assertj.core.description.Description) ,public java.lang.String create() ,public boolean equals(java.lang.Object) ,public int hashCode() ,public java.lang.String toString() <variables>protected final non-sealed java.lang.Object[] arguments,protected final non-sealed java.lang.String format,org.assertj.core.error.MessageFormatter formatter