// Copyright 2022 The ChromiumOS Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. //! Provides an tool for metrics client cleanup which may hold global state. /// Ensures any cleanup necessary is performed on drop. Can be used to ensure cleanup is done /// regardless of how the caller exits. Should be idempotent. pub struct MetricsClientDestructor(Box); impl MetricsClientDestructor { pub fn new(cleanup: T) -> Self { MetricsClientDestructor(Box::new(cleanup)) } /// A convenience method for immediately dropping self and invoking drop logic on the contained /// object. pub fn cleanup(self) {} } impl Drop for MetricsClientDestructor { fn drop(&mut self) { self.0(); } }