static <T> Callable<T> decorateCallable(Observation observation, Callable<T> callable) {
        return () -> {
            observation.start();
            try {
                return callable.call();
            } catch (Exception e) {
                observation.error(e);
                throw e;
            } finally {
                observation.stop();
            }
        };
    }
@Test
    public void shouldDecorateCallable() throws Throwable {
        given(helloWorldService.returnHelloWorldWithException()).willReturn("Hello world");
        Callable<String> timedSupplier = Observations
            .decorateCallable(observation, helloWorldService::returnHelloWorldWithException);

        String value = timedSupplier.call();

        assertThatObservationWasStartedAndFinishedWithoutErrors();
        assertThat(value).isEqualTo("Hello world");
        then(helloWorldService).should(times(1)).returnHelloWorldWithException();
    }