Skip to main content

GitLab

Struct GitLab 

Source
pub struct GitLab { /* private fields */ }
Expand description

GitLab API client for retrieving user activity and commit information.

This client handles authentication and data retrieval from GitLab instances, specifically focusing on user events and commit details that can be transformed into task entries for time tracking purposes.

The client is stateless and thread-safe, making it suitable for concurrent operations and long-running applications.

Implementations§

Source§

impl GitLab

Source

pub fn new(config: &GitLabConfig) -> Self

Creates a new GitLab API client instance.

Initializes the HTTP client with default settings suitable for GitLab API interactions. The client is configured for JSON responses and includes reasonable timeout settings.

§Arguments
  • config - GitLab configuration containing API endpoint and authentication token
§Example
let config = GitLabConfig {
    access_token: "glpat-xxxxxxxxxxxxxxxxxxxx".to_string(),
    api_url: "https://gitlab.example.com".to_string(),
};
let client = GitLab::new(&config);
Source

pub async fn get_user_id(&self) -> Result<u32>

Retrieves the current user’s GitLab ID.

Makes a request to GitLab’s /user endpoint to fetch the authenticated user’s information. The user ID is required for subsequent calls to the events API.

§Returns
  • Result<u32> - The numeric user ID on success
§Errors

Returns an error if:

  • Network request fails
  • Authentication token is invalid
  • GitLab returns an unexpected response format
§API Endpoint

GET /api/v4/user - Requires read_user scope

Source

pub async fn get_today_commits(&self) -> Result<Vec<CommitInfo>>

Fetches all commits made by the authenticated user today.

This is the primary method for discovering development activity that can be converted into time tracking tasks. It retrieves user events from yesterday to tomorrow (to handle timezone issues) and filters for push events containing commit information.

§Process Flow
  1. Date Range Calculation: Creates a date range around today to handle timezone differences
  2. User ID Retrieval: Gets the authenticated user’s ID for events API
  3. Events Fetching: Retrieves user events within the date range
  4. Event Filtering: Processes only “pushed to” events with commit data
  5. Commit Details: Fetches detailed commit information for each push
  6. Message Processing: Extracts and cleans commit messages for task names
§Error Resilience

This method is designed to be fault-tolerant in production environments:

  • Network failures return empty results instead of errors
  • Individual commit fetch failures are skipped
  • API parsing errors are logged and don’t interrupt processing
  • Missing or malformed data is handled gracefully
§Returns
  • Result<Vec<CommitInfo>> - List of today’s commits, or empty vector on any error
§Example
let commits = gitlab_client.get_today_commits().await?;
for commit in commits {
    println!("Commit {}: {}", commit.sha, commit.message);
}

Trait Implementations§

Source§

impl Debug for GitLab

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more