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