Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: bootstrap sqlx-jiff development #141

Open
wants to merge 7 commits into
base: master
Choose a base branch
from

Conversation

tisonkun
Copy link

This refers to #50.

Firstly, I considered to add a separated sqlx-jiff method, but soon I found that due to Rust's orphan rules, implementing sqlx's trait for Timestamp and other types requires the code to be located at the same crate (jiff). Otherwise we need an extra wrapper struct like:

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Timestamp(pub jiff::Timestamp);

I prefer to implement code in jiff and gate it with feature flags.

@BurntSushi This demonstrates the integration implementation direction. I'll complete other parts when we agree on this direction.

@BurntSushi
Copy link
Owner

#50 (comment) discusses this. And the orphan rule is taken into account there. The way to do this integration, short of getting it merged upstream in sqlx itself, is with a wrapper type in a jiff-sqlx crate. The comment linked explains how to do this.

Jiff is a "low level" crate. Having it depend on "high level" crates like sqlx would lead to all sorts of problems, especially if and when the time ever comes for sqlx to add Jiff integration on their end. It's really a non-starter.

Copy link
Author

@tisonkun tisonkun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@BurntSushi Yeah .. Adopt the other way now.

sqlx-jiff/src/lib.rs Outdated Show resolved Hide resolved
}
}

impl Deref for Timestamp {
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

impl AsRef also?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure how far we want to go here. In theory, there are a lot of different traits we might want to implement. In practice, I'm not sure how useful they all are or whether we even want to encourage their use. I'd start with a minimal useful set for now.

I'm actually not even sure about using Deref here. I'd leave that out for now.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK. Then I'd revoke #[derive(PartialEq, Eq, Serialize, Deserialize)] also but just make it an opaque wrapper type. Users should always call to_jiff and use jiff::Timestamp's method.

@BurntSushi
Copy link
Owner

Also, the crate should be called jiff-sqlx, since it lives with jiff.

@tisonkun
Copy link
Author

tisonkun commented Oct 11, 2024

Other type mapping to be wrapped once we agree on the pattern:

  • jiff::civil::Date <-> DATE
  • jiff::civil:Time <-> TIME
  • jiff:civil::DateTime <-> TIMESTAMP
  • jiff::Timestamp <-> TIMESTAMPTZ
  • jiff::SignedDuration <-> INTERVAL

Ref -

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants