I think one way or the other the struct ble_gatts_evt_t must be correlated with the GATT profile, that is, ble_gatts_evt_t should have services and characteristics as its members that match the definition of what a GATT looks like (I used "looks like" here because a profile is customizable) yet, when I try to compare the two, I find they have much less in common than I thought.
Any expert opinion on this? Was I trying to compare two completely different things? Or GATT is just a small subset inside the ble_gatts_evt_t, thus the massive differences?